【问题标题】:Merging two list of dictionary in python在python中合并两个字典列表
【发布时间】:2018-06-27 18:26:11
【问题描述】:
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

请告诉我是否有任何简单的方法或更pythonic的方法来做到这一点

【问题讨论】:

标签: python


【解决方案1】:

只需使用 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

如果列表保证被排序,您可以在应用我的方法之前按公共键排序,在本例中为 name

lst1, lst2 = (sorted(i, key=lambda x: x['name']) for i in [lst1, lst2])

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多