如何从Python嵌套字典中提取指定格式的键数据?
解决字典键提取的问题
我来帮你搞定这个问题!你遇到的问题本质是循环中重复赋值覆盖了之前的结果——对于'Doon-Gurgaon'这个键,你的循环会先把8赋值给它,接着又把6赋值过去,最后只保留了最后一次的结果。要实现你的需求,我们需要根据内层字典键的数量来决定赋值单个值还是列表,具体方案如下:
错误原因分析
你的原代码:
A = {"'Delhi-Mumbai'": {6: [3]}, "'Doon-Gurgaon'": {8: [6, 9, 8, 5], 6: [7, 1, 2]}} new = {} for k,v in A.items(): for i,j in v.items(): new[k]=i
这段代码中,每次内层循环都会给new[k]重新赋值,所以对于有多个内层键的'Doon-Gurgaon',最终只会保留最后一次遍历到的键(也就是6),这和你的预期不符。
正确实现代码
我们可以通过提取内层字典的所有键,再根据键的数量来处理:
A = {"'Delhi-Mumbai'": {6: [3]}, "'Doon-Gurgaon'": {8: [6, 9, 8, 5], 6: [7, 1, 2]}} extracted = {} for k, inner_dict in A.items(): # 获取内层字典的所有键,转为列表 keys = list(inner_dict.keys()) # 根据键的数量决定赋值方式 if len(keys) == 1: extracted[k] = keys[0] else: extracted[k] = keys print(extracted) # 输出:{"'Delhi-Mumbai'": 6, "'Doon-Gurgaon'": [8, 6]}
代码逻辑说明
- 遍历原字典的每个外层键值对,
inner_dict是对应内层的子字典。 - 用
list(inner_dict.keys())获取内层所有键的列表。 - 如果列表长度为1,直接将单个键值赋值给
extracted[k];如果长度大于1,就把整个列表赋值过去,完美匹配你的需求。
内容的提问来源于stack exchange,提问作者Rohit Kumar
相关产品推荐
相关产品推荐

