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化的方式可以做到这一点
答案 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 +