我已经进行了一些搜索、播放,但似乎仍然无法找到解决方案。
假设我有一个字典列表,例如:
listofdicts = [
{'Name': 'Jim', 'Attribute': 'Height', 'Value': '6.3'},
{'Name': 'Jim', 'Attribute': 'Weight', 'Value': '170'},
{'Name': 'Mary', 'Attribute': 'Height', 'Value': '5.5'},
{'Name': 'Mary', 'Attribute': 'Weight', 'Value': '140'}
]
但我想把每一个都放在一个单数命名的字典中,例如:
listofdicts = [
{'Person': {'Name': 'Jim', 'Attribute': 'Height', 'Value': '6.3'}},
{'Person': {'Name': 'Jim', 'Attribute': 'Weight', 'Value': '170'}},
{'Person': {'Name': 'Mary', 'Attribute': 'Height', 'Value': '5.5'}},
{'Person': {'Name': 'Mary', 'Attribute': 'Weight', 'Value': '140'}}
]
我该怎么做?
我已经管理了以下内容,但它似乎只嵌套了一本字典:
betterlist = { 'Person' : i for i in listofdicts}
任何帮助将不胜感激。谢谢大家。
答案 0 :(得分:2)
您已经接近了,您正在创建列表推导式,而不是字典推导式
betterlist = [{ 'Person' : i} for i in listofdicts]
“它似乎只嵌套一个字典”的原因是您的字典理解对每个元素使用相同的键,因此它会用 i
的最新值覆盖以前的值
答案 1 :(得分:2)
你几乎猜对了,但你的最外层结构应该是一个列表 []
,而你构建的每个 元素 都是你创建的字典 {'Person': i}
:
better_list = [
{'Person': p}
for p in list_of_dicts
]
你写的叫做dict理解,只创建一个单字典。由于字典中的键只能出现一次,因此每次迭代 i
都会覆盖单个键 'Person'
,因此您最终会得到 listofdicts
中最后一个的人。>
答案 2 :(得分:2)
所以基本上有两种(简单的)方法可以做到这一点。
最简单的方法是创建一个循环:
newDict = []
for d in listofdicts:
newDict.append({'Person': d}) # I'm creating the dict, and then appending to newDict
有一个快捷方式可以完成上述操作,称为 list comprehension
。
newDict = [{'Person': d} for d in listofdicts] # Can you compare the 2 approach's syntax?
明白这只是一个捷径。没有任何性能改进。如果我是 Python 新手,我会选择第一种方法,因为我非常清楚它在做什么。