我有字典A:
A = {"'Delhi-Mumbai'": {6: [3]}, "'Doon-Gurgaon'": {8: [6, 9, 8, 5], 6: [7, 1, 2]}}
我想从中提取数据,以便最终得到这个
extracted = {"'Delhi-Mumbai'": 6, "'Doon-Gurgaon'": [8,6]}
我尝试运行此
for k,v in A.items():
for i,j in v.items():
new[k]=i
但是此代码仅返回:
{"'Delhi-Mumbai'": 6, "'Doon-Gurgaon'": 6}
我该怎么做?
答案 0 :(得分:6)
这是一个简单的选择:
res = {key: list(value) for key, value in A.items()}
如果您想同时修改双引号,则可以使用以下方法:
res = {key[1:-1]: list(value) for key, value in A.items()}
# {'Delhi-Mumbai': [6], 'Doon-Gurgaon': [8, 6]}
在这里,我只是剥离每个字符串的第一个和最后一个字符。
在您的解决方案中,您为每个新的new[k] = i
覆盖了i
。这样只剩下最后一个。
答案 1 :(得分:2)
尝试一下:
extracted = {k: v.keys() for k, v in A.items()}
这种方法将始终为主词典中的每个项目创建一个列表。
如果您不希望只有一个元素时有列表,则可以将v.keys()
替换为v.keys() if len(v) > 1 else next(iter(v))
请注意,这种方法仅在主字典中的每个值都是另一本字典并且这些嵌套字典中的每个包含至少一个元素的情况下才有效。
此外,我强烈建议您学习Python中的列表和字典理解。创建列表和字典的方法非常有用且性能更好。
答案 2 :(得分:2)
您可以尝试
for k,v in A.items():
print(k,v)
L=[]
for i,j in v.items():
L.append(i)
print(i,j)
if len(L)==1:
new[k]=L[0]
else:
new[k]=L
答案 3 :(得分:0)
使用这个。
A = {"'Delhi-Mumbai'": {6: [3]}, "'Doon-Gurgaon'": {8: [6, 9, 8, 5], 6: [7, 1, 2]}}
new = {}
for k,v in A.items():
l = []
for i,j in v.items():
l.append(i)
if len(l) == 1:
new[k] = l[0]
else:
new[k] = l
print(new)
结果:{"'Delhi-Mumbai'": 6, "'Doon-Gurgaon'": [8,6]}