我有一个tupple
,其中包含多个dict
,其中每个dict
都包含一个列表:
({'num' : [1, 2, 3], 'let': ['a', 'b', 'c']},
{'num' : [4, 5, 6], 'let': ['d', 'e', 'f']},
{'num' : [7, 8, 9], 'let': ['g', 'h', 'i']})
我想将所有dict
连接成一个dict
,其中包含前一个dict
的一长列值:
{'let': ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'],
'num': [1, 2, 3, 4, 5, 6, 7, 8, 9]}
到目前为止,我所尝试的所有内容都给了我一个错误,或导致输出的list
list
而不是一个列表。
答案 0 :(得分:0)
您可以使用collections.defaultdict
:
from collections import defaultdict
d= defaultdict(list)
s = ({'num' : [1, 2, 3], 'let': ['a', 'b', 'c']},
{'num' : [4, 5, 6], 'let': ['d', 'e', 'f']},
{'num' : [7, 8, 9], 'let': ['g', 'h', 'i']})
for i in s:
d['num'].extend(i['num'])
d['let'].extend(i['let'])
print(dict(d))
输出:
{'num': [1, 2, 3, 4, 5, 6, 7, 8, 9], 'let': ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']}
或者,没有defaultdict
:
s = ({'num' : [1, 2, 3], 'let': ['a', 'b', 'c']},
{'num' : [4, 5, 6], 'let': ['d', 'e', 'f']},
{'num' : [7, 8, 9], 'let': ['g', 'h', 'i']})
new_s = {"num" if all(isinstance(d, int) for d in a) else "let":a for a in [reduce(lambda x, y:x+y, c) for c in zip(*[[b[-1] for b in i.items()] for i in s])]}
输出:
{'num': [1, 2, 3, 4, 5, 6, 7, 8, 9], 'let': ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']}