将字典列表转换为嵌套字典

时间:2012-09-25 15:26:54

标签: python

关于这个主题有很多问题,但我还没有能够根据我的情况调整解决方案。假设我有一个平面文件列表:

[{'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'}]

我希望将其转换为嵌套字典,以便属性/值对与每个名称相关联:

{ 
    'Jim': {'Height': '6.3', 'Weight': '170'},
    'Mary': {'Height': '5.5', 'Weight': '140'}
}

2 个答案:

答案 0 :(得分:8)

使用defaultdict以便于处理这些条目:

output = defaultdict(dict)

for person in people:
    output[person['Name']][person['Attribute']] = person['Value']

答案 1 :(得分:3)

在此处查看我的NestedDict课程:https://stackoverflow.com/a/16296144/2334951

>>> d = [{'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}, ]
>>> result = NestedDict()
>>> for i in d:
...     path = [i['name'], i['attribute']] # list of keys in order of nesting
...     result[path] = i['value']
>>> print(result)
{'Mary': {'Height': 5.5, 'Weight': 140}, 'Jim': {'Height': 6.3, 'Weight': 170}}