首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在单个键上连接两个字典列表

在单个键上连接两个字典列表
EN

Stack Overflow用户
提问于 2011-03-31 22:53:36
回答 1查看 34.1K关注 0票数 37

给定以m字典为元素的n列表,我想生成一个新的列表,其中包含一组连接的字典。每个字典都保证有一个名为"index“的键,但也可以有一组超出这个范围的键。非索引键永远不会跨列表重叠。例如,假设有以下两个列表:

l1 = [{"index":1, "b":2}, {"index":2, "b":3}, {"index":3, "green":"eggs"}]
l2 = [{"index":1, "c":4}, {"index":2, "c":5}]

("b"永远不会出现在l2中,因为它出现在l1中,同样,"c"永远不会出现在l1中,因为它出现在l2中)

我想要生成一个加入的列表:

l3 = [{"index":1, "b":2, "c":4}, 
      {"index":2, "b":3, "c":5}, 
      {"index":3, "green":"eggs"}]

在Python中执行此操作的最有效方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2014-12-23 02:19:15

下面是完成此操作的一行代码:

[dict(sum([z.items() for z in z2],[])) for z2 in [[x3 for x3 in l1+l2 if x3['index']==key] for key in set([x1['index'] for x1 in l1]+[x2['index'] for x2 in l2])]]

并不像列表理解那样优雅。我也不认为结果一定会按照你想要的方式排序。

扩展一行代码:

[
    dict(sum([z.items() for z in z2],[])) 
    for z2 in [
        [
            x3 for x3 in l1+l2 if x3['index']==key
        ] for key in set(
            [x1['index'] for x1 in l1]+[x2['index'] for x2 in l2]
        )
    ]
]

第6行上的set表达式从两个列表中获取所有唯一索引值。围绕这一点的列表理解(第3-9行)创建了一个列表列表,其中每个内部列表都是该索引/键与特定索引值的字典的组合列表。最外层的列表理解为每个键创建一个元组对列表,并将其转换回字典列表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5501810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档