合并两个列表的列表 - Python

1 投票
4 回答
9488 浏览
提问于 2025-04-15 11:19

这是一篇很好的入门文章,但没有回答我需要的内容:在Python中合并两个已排序的列表

我有两个Python列表,每个列表都是一对日期时间和数值的组合:

list_a = [['1241000884000', 3], ['1241004212000', 4], ['1241006473000', 11]]

还有:

list_x = [['1241000884000', 16], ['1241000992000', 16], ['1241001121000', 17], ['1241001545000', 19], ['1241004212000', 20], ['1241006473000', 22]]
  1. 实际上,有很多不同的list_a列表,每个列表都有不同的键和值。
  2. 所有的list_a中的日期时间都在list_x中。
  3. 我想创建一个新的列表list_c,里面包含每个list_a对应的list_x中的日期时间和它们各自的值value_a/value_x。

附加说明:

在我实际的程序中,list_a实际上是一个字典中的列表,像这样。 如果要处理字典层级的话,应该是:

dict = {object_a: [['1241000884000', 3], ['1241004212000', 4], ['1241006473000', 11]], object_b: [['1241004212000', 2]]}

不过这个部分我可以搞定。

4 个回答

2

没有什么比一行简洁的函数代码更让人舒服的了:

reduce(lambda l1,l2: l1 + l2, list)
3

“我想要创建一个列表,list_c,这个列表要和每个list_a对应,并且包含来自list_x的每个日期时间和value_a/value_x的值。”

def merge_lists( list_a, list_x ):
    dict_x= dict(list_x)
    for k,v in list_a:
        if k in dict_x:
            yield k, (v, dict_x[k])

类似这样的方式也许可以实现。

merged= list( merge_lists( someDict['object_a'], someDict['object_b'] )

这样做可能会稍微快一点,因为它只创建了一个字典来查找,而不改变另一个列表。

4

这里有段代码可以实现你想要的功能。你可以很简单地把一对对的列表转换成一个字典。接着,通过找出键的交集,就能找到那些共享的键。最后,根据这些共享的键来构建结果字典也是很简单的。

dict_a = dict(list_a)
dict_x = dict(list_x)

shared_keys = set(dict_a).intersection(set(dict_x))

result = dict((k, (dict_a[k], dict_x[k])) for k in shared_keys)

撰写回答