![](/img/trans.png)
[英]transpose dictionary (extract all the values for one key from a list of dictionaries)
[英]Extract values from dictionary of dictionaries
我有一本字典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}
我怎样才能做到这一点?
这是一个简单的选择:
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]}
在这里,我只是剥离每个字符串的第一个和最后一个字符。
在您的解决方案中,您为每个新i
覆盖new[k] = i
i
。 这样,仅剩下最后一个。
尝试这个:
extracted = {k: v.keys() for k, v in A.items()}
这种方法将始终为主词典中的每个项目创建一个列表。
如果您不希望只有一个元素时有列表,则可以v.keys() if len(v) > 1 else next(iter(v))
用v.keys() if len(v) > 1 else next(iter(v))
替换v.keys()
v.keys() if len(v) > 1 else next(iter(v))
请注意,这种方法仅在主字典中的每个值都是另一个字典并且这些嵌套字典中的每个包含至少一个元素的情况下才起作用。
另外,我强烈建议您学习Python中的列表和字典理解。 创建列表和字典的真正有用且性能更好的方法。
你可以试试这个
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
使用这个。
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]}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.