如果我有一个包含相同值的列表的字典:
a = {'abc': [['aaa', '123'], ['aaa, '321']]}
如何将这些值收集到另一个字典中,如下所示:a = {'abc': {'aaa':['123','321']}}
我试过了
aa = {'abc': [['aaa', '123'], ['aaa', '321']]}
ab = {}
bb = []
for i in aa:
for elem in aa[i]:
path = elem[0]
name = elem[1]
bb.append(name)
ab[path] = []
ab[path] = (bb)
print ab
但我不认为这是对的。
答案 0 :(得分:3)
您可以尝试这样:
def to_nested_dict(list_dict):
d = {} # initialize the outer dict
for k, lst in list_dict.items():
d[k] = {} # initialize inner dicts
for x, y in lst:
d[k].setdefault(x, []).append(y) # initialize and populate innermost list
return d
如果是新密钥,则使用setdefault
提供defalt值(空列表),但您也可以使用if
- 语句或collections.defaultdict(list)
此
示例:
>>> to_nested_dict({'abc': [['aaa', '123'], ['aaa', '321']]})
{'abc': {'aaa': ['123', '321']}}
>>> to_nested_dict({'abc': [['aaa', '123'], ['aaa', '321'], ['bbb', '456']]})
{'abc': {'aaa': ['123', '321'], 'bbb': ['456']}}
>>> to_nested_dict({'abc': [['aaa', '123'], ['aaa', '321'], ['bbb', '456']], 'efg': [['eee', '789']]})
{'abc': {'aaa': ['123', '321'], 'bbb': ['456']}, 'efg': {'eee': ['789']}}
这并不是假设最里面的列表总是有两个元素,一个键和一个值,并且键在不同的列表中可以是相同的,但也可以不同,从而导致多个条目创建词典。
答案 1 :(得分:2)
以下是适合您的单行解决方案:
ab = { k:{v[0][0]:[ x[1] for x in v ] } for k,v in aa.iteritems() }
输出:
print ab
{'abc': {'aaa': ['123', '321']}}
瞧