从字典列表中制作嵌套字典

时间:2021-04-06 13:10:58

标签: python python-3.x

我已经进行了一些搜索、播放,但似乎仍然无法找到解决方案。

假设我有一个字典列表,例如:

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}

任何帮助将不胜感激。谢谢大家。

3 个答案:

答案 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 新手,我会选择第一种方法,因为我非常清楚它在做什么。

相关问题