在Python中合并两个字典列表

时间:2018-06-27 18:26:12

标签: python

lst1 = [
    {'mem': '20.0', 'name': 'p1', 'cpu': '20.0'}, 
    {'mem': '20.0', 'name': 'p2', 'cpu': '20.0'},
    {'mem': '20.0', 'name': 'p3', 'cpu': '20.0'}, 
    {'mem': '20.0', 'name': 'p4', 'cpu': '20.0'}
]

lst2 = [
    {'pid': 814, 'name': 'p1'},
    {'pid': 999, 'name': 'p2'},
    {'pid': 1006, 'name': 'p3'},
    {'pid': 1152, 'name': 'p4'}
]

我需要将以上两个列表合并为一个列表,即

lst3 = [
    {'mem': '20.0', 'name': 'p1', 'cpu': '20.0', 'pid':814}, 
    {'mem': '20.0', 'name': 'p2', 'cpu': '20.0','pid':999},
    {'pid': 1006, 'mem': '20.0', 'name': 'p3', 'cpu': '20.0'},
    {'pid': 1152,'mem': '20.0', 'name': 'p4', 'cpu': '20.0'}
]

我尝试过以下方式

lst3 = list()
test = dict()
for f,b in zip(lst1,lst2):
    test = f.copy()
    test.update(b)
    #print test
    lst3.append(test)

print lst3

请告诉我,有什么简单的方法或更Python化的方式可以做到这一点

1 个答案:

答案 0 :(得分:2)

只要使用 @bot.command() async def clear(ctx,amount): channel = ctx.message.channel messages = [] async for message in channel.history(limit=int(amount)): messages.append(message) await channel.purge(messages) 并合并,只要两个列表相对于彼此排序:

zip

匹配输出:

out = [{**i, **j} for i, j in zip(lst1, lst2)]

# Result

[{'cpu': '20.0', 'mem': '20.0', 'name': 'p1', 'pid': 814},
 {'cpu': '20.0', 'mem': '20.0', 'name': 'p2', 'pid': 999},
 {'cpu': '20.0', 'mem': '20.0', 'name': 'p3', 'pid': 1006},
 {'cpu': '20.0', 'mem': '20.0', 'name': 'p4', 'pid': 1152}]

如果不能保证对列表进行排序,则可以在应用我的方法之前,对公用密钥(在这种情况下为 In [292]: out == lst3 Out[292]: True )进行排序:< / p>

name

就我个人而言,我认为您当前的方法效果很好,而且很清楚您在做什么。另外,我的合并方法仅适用于Python 3.5 +