合并python字典

时间:2018-05-05 22:21:55

标签: python

我需要帮助将这些词典转换为单个词典。见下文

data = [{'x': 3, 'y': 3}, {'x': 5, 'y': 3}, {'x': 1, 'y': 4}]

我想将其转换为以下内容:

{'x':[3,5,1], 'y':[3,3,4]
谢谢你!

2 个答案:

答案 0 :(得分:1)

您可以使用词典理解:

data = [{'x': 3, 'y': 3}, {'x': 5, 'y': 3}, {'x': 1, 'y': 4}]
new_data = {i:[c.get(i) for c in data] for i in ['x', 'y']}

输出:

{'y': [3, 3, 4], 'x': [3, 5, 1]}

但是,为了更通用,您可以使用reduce

from functools import reduce
new_result = {
    i : [c.get(i) for c in data] 
    for i in set(reduce(
      lambda x, y:list(getattr(x, 'keys', lambda :x)()) + list(y.keys()), data)
   )
} 

编辑:更短的通用解决方案:

new_s = {i for b in map(dict.keys, data) for i in b}
new_data = {i:[c.get(i) for c in data] for i in new_s}

答案 1 :(得分:1)

这是一种简单的方法:

data = [{'x': 3, 'y': 3}, {'x': 5, 'y': 3}, {'x': 1, 'y': 4}]


emptyX = []
emptyY = []

for i in data:
    emptyX.append(i['x'])
    emptyY.append(i['y'])

final = {'x':emptyX, 'y':emptyY}

print(final)

在这里,您只需创建两个空列表。一个用于存储x值,另一个用于存储y值,然后在for循环通过列表进行插入时添加每个字典的值。