连接一个dicts元组

时间:2017-11-28 18:05:29

标签: python dictionary data-structures

我有一个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而不是一个列表。

1 个答案:

答案 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']}