我有以下词典列表:
list1 = [
{ 'n1': ('e1','e2','e3') },
{ 'n2': ('e1','e2') },
{ 'n3': ('e2','e3','e4') }
]
我需要将其转换为:
list2 = [
{ 'e1': ('n1','n2') },
{ 'e2': ('n1','n2','n3') },
{ 'e3': ('n3',) },
{ 'e4': ('n3',) }
]
有没有简短而聪明的方法来做到这一点?
答案 0 :(得分:0)
这样的事情:
>>> from itertools import chain
>>> from collections import defaultdict
>>> vals = set(chain.from_iterable(y for x in list1 for y in x.values()))
>>> dic = defaultdict(list)
>>> for x in vals:
... for y in list1:
... for k,v in y.items():
... if x in v:
... dic[x].append(k)
...
>>> dic
defaultdict(<type 'list'>,
{'e4': ['n3'],
'e1': ['n1', 'n2'],
'e3': ['n1', 'n3'],
'e2': ['n1', 'n2', 'n3']})
答案 1 :(得分:0)
我认为setdefault在此任务中对您有用。 如果你需要dict作为结果。你可以使用这样的东西。
res = {}
for d in list1:
for k, v in d.iteritems():
for i in v:
res.setdefault(i, []).append(k)
如果您需要词典列表,可以在此之后使用列表推导
res = [{k:v} for k, v in res.iteritems()]
如果您坚持将列表作为值列表,则将列表转换为最后列表中的元组
res = [{k: tuple(v)} for k, v in res.iteritems()]