繁体   English   中英

从字典键、子键和值的列表构造字典

[英]Construct a dictionary from a list of dictionary keys, sub-keys and values

有一个字典列表:

list_dict = [['key1', {'subkey1': 0}],
             ['key1', {'subkey2': 2}],
             ['key1', {'subkey5': 5}],
             ['key2', {'subkey2': 4}],
             ['key2', {'subkey1': 8}],
             ['key1', {'sybkey5': 10}]]

如何将list_dict转换为整洁的字典,如下所示?

{'key1': {'subkey1': 0, 'subkey2': 2, 'subkey5': 5},
 'key2': {'subkey2': 4, 'subkey1': 8, 'sybkey5': 10}}

以下应该有效:

d = dict()
for item in list_dict:
    d.setdefault(item[0], {}).update(item[1])

来自Python 3 文档

设置默认(键[,默认])

如果键在字典中,则返回其值。 如果不是,则插入值为默认值的键并返回默认值。 默认默认为无。

你可以使用collections.defaultdict

from collections import defaultdict


list_dict = [['key1', {'subkey1': 0}],
             ['key1', {'subkey2': 2}],
             ['key1', {'subkey5': 5}],
             ['key2', {'subkey2': 4}],
             ['key2', {'subkey1': 8}],
             ['key1', {'sybkey5': 10}]]

d = defaultdict(dict)

for k, v in list_dict:
    d[k].update(v)
d

output:

defaultdict(dict,
            {'key1': {'subkey1': 0, 'subkey2': 2, 'subkey5': 5, 'sybkey5': 10},
             'key2': {'subkey2': 4, 'subkey1': 8}})

或者您可以使用速度较慢的dict.setdefault

d = {}
for k, v in list_dict:
    d.setdefault(k, {}).update(v)

output:

{'key1': {'subkey1': 0, 'subkey2': 2, 'subkey5': 5, 'sybkey5': 10},
 'key2': {'subkey2': 4, 'subkey1': 8}}

这有效:

>>> from collections import defaultdict
>>> result = defaultdict(dict)
>>> for item in list_dict :
...     result[item[0]].update(item[1])
... 
>>> result
defaultdict(<type 'dict'>, {'key2': {'subkey2': 4, 'subkey1': 8}, 'key1': {'subkey5': 5, 'subkey2': 2, 'sybkey5': 10, 'subkey1': 0}})
>>> 

常规方法

new_dict = {}
for i in list_dict:
    if i[0] in new_dict.keys():
            new_dict[i[0]].update(i[1])
    else:
            new_dict[i[0]]=i[1]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM