Python 从字典字典中提取值
我有一本字典:Python 从字典字典中提取值,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,我有一本字典: 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 但此代
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()}
如果您想在同一个go中修复双引号,可以使用以下方法:
res = {key[1:-1]: list(value) for key, value in A.items()}
# {'Delhi-Mumbai': [6], 'Doon-Gurgaon': [8, 6]}
这里我只是去掉每个字符串的第一个和最后一个字符
在您的解决方案中,您为每个新的
i
覆盖new[k]=i
。这样就只剩下最后一个了。试试这个:
extracted = {k: v.keys() for k, v in A.items()}
这种方法将始终为主词典中的每个项目创建一个列表
如果您不希望在只有一个元素的情况下有一个列表,您可以将v.keys()
替换为v.keys(),如果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)
结果:
{“德里-孟买”:6,“'Doon-Gurgaon'”[8,6]}
为什么要引用字符串两次?我如何更改?我从另一个函数获得这种输出修复另一个函数。使用print()
infor
循环查看变量中的内容-这有助于了解问题所在。更简单的是:{key:list(value)for key,value in A.items()}