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

如何遍历嵌套字典生成以ID为标识的结构化列表?

解决嵌套字典转条目列表的问题

嘿,我明白你的问题啦!你遇到的[None, None, None, None]问题,是因为在循环里用了字符串'i'而不是变量i——v.get('i')会去每个字段字典里找键为'i'的值,而不是你循环的数字键(比如20、21),所以自然找不到,返回None。

下面给你两种可行的解决方案,都能帮你遍历所有数字键,生成你需要的条目列表:

方法一:分步循环(可读性高)

先拿到所有的数字键(假设所有字段的键都是一致的,比如Name里的键就是所有条目ID),然后逐个键去收集每个字段对应的值:

# 你的原始嵌套字典
table_2 = {
    'Name': {'20': 'Paul Merrill', '21': 'Brynne S. Barr'},
    'Phone': {'20': '1-313-739-3854', '21': '939-4818'},
    'Address': {'20': '916-8087 Vehicula Rd.', '21': '878-2231 Suspendisse Rd.'},
    'City': {'20': 'Le Mans', '21': 'Wilhelmshaven'}
}

result = []
# 获取所有数字键(从任意一个字段的字典里取即可)
entry_ids = table_2['Name'].keys()

for entry_id in entry_ids:
    # 每个条目先以数字键开头
    current_entry = [entry_id]
    # 遍历每个字段,取出对应ID的值
    for field_data in table_2.values():
        # 如果怕有缺失键,可以用field_data.get(entry_id, '')替代field_data[entry_id]
        current_entry.append(field_data[entry_id])
    result.append(current_entry)

print(result)

运行后就会得到你想要的结果:

[
 ['20', 'Paul Merrill', '1-313-739-3854', '916-8087 Vehicula Rd.', 'Le Mans'],
 ['21', 'Brynne S. Barr', '939-4818', '878-2231 Suspendisse Rd.', 'Wilhelmshaven']
]

方法二:列表推导式(简洁高效)

如果喜欢更紧凑的代码,可以用嵌套列表推导式一步完成:

entry_ids = table_2['Name'].keys()
result = [[entry_id] + [field[entry_id] for field in table_2.values()] for entry_id in entry_ids]

这个和方法一的逻辑完全一致,只是写法更简洁,适合熟悉列表推导式的场景。

小提示

如果你的数据里可能存在某个字段缺失某个数字键的情况,建议用field.get(entry_id, '')替代field[entry_id],这样不会抛出KeyError,而是返回你指定的默认值(比如空字符串),让程序更健壮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:27:45