You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将嵌套字典中每个键的所有值提取到列表中(Python)

更Python风格的嵌套字典值提取方法

你现有的代码可以实现需求,但确实有更简洁、贴合Python风格的写法,下面给出几种优化方案:

原代码

if __name__ == "__main__":

    master_dict = {"1": {"1": 11, "2":22, "3": 33},
                   "2": {"1": 15, "2":23, "3": 31}}

    ones = []
    twenties = []
    thirties = []
    for k, v in master_dict.items():
        ones.append(v["1"])
        twenties.append(v["2"])
        thirties.append(v["3"])

    print("ones : ", ones)
    print("twenties : ", twenties)
    print("thirties : ", thirties)

原运行结果

ones :  [11, 15]
twenties :  [22, 23]
thirties :  [33, 31]

方案1:列表推导式(最简洁直观)

用列表推导式直接生成目标列表,省去循环内的append操作,代码更紧凑:

if __name__ == "__main__":
    master_dict = {"1": {"1": 11, "2":22, "3": 33},
                   "2": {"1": 15, "2":23, "3": 31}}

    ones = [v["1"] for v in master_dict.values()]
    twenties = [v["2"] for v in master_dict.values()]
    thirties = [v["3"] for v in master_dict.values()]

    print("ones : ", ones)
    print("twenties : ", twenties)
    print("thirties : ", thirties)

这里直接遍历master_dict.values()(不需要外层字典的键,所以不用items()),一行代码生成一个列表,符合Python的简洁风格。

方案2:单次遍历生成所有列表

如果担心多次遍历字典(虽然开销极小),可以用一次循环同时填充三个列表,兼顾效率和简洁性:

if __name__ == "__main__":
    master_dict = {"1": {"1": 11, "2":22, "3": 33},
                   "2": {"1": 15, "2":23, "3": 31}}

    ones, twenties, thirties = [], [], []
    for v in master_dict.values():
        ones.append(v["1"])
        twenties.append(v["2"])
        thirties.append(v["3"])

    print("ones : ", ones)
    print("twenties : ", twenties)
    print("thirties : ", thirties)

把三个列表的初始化放在一行,同时遍历values(),比原代码更紧凑。

方案3:用zip批量提取

如果嵌套字典的键顺序固定,可通过zip一次性提取所有对应位置的值,代码量最少:

if __name__ == "__main__":
    master_dict = {"1": {"1": 11, "2":22, "3": 33},
                   "2": {"1": 15, "2":23, "3": 31}}

    # 按固定顺序取出子字典的值,再用zip打包分组
    ones, twenties, thirties = zip(*((v["1"], v["2"], v["3"]) for v in master_dict.values()))
    # zip返回元组,转成列表(如果需要的话)
    ones, twenties, thirties = list(ones), list(twenties), list(thirties)

    print("ones : ", ones)
    print("twenties : ", twenties)
    print("thirties : ", thirties)

注:Python 3.7+中字典的values()会保留插入顺序,如果你的版本低于3.7,必须显式指定键的顺序(如上代码),避免值的顺序混乱。

内容的提问来源于stack exchange,提问作者Windy71

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 04:05:19