合并两个列表列表 - Python

时间:2009-04-29 17:57:29

标签: python django list

这是一本很棒的入门书,但没有回答我的需要: Combining two sorted lists in 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中的每个日期时间。
  4. 加成:

    在我的真实程序中,list_a实际上是字典中的列表。对词典级别的回答是:

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

    我可以解决这个问题。

4 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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'] )

这可能会稍快一点,因为它只会为查找创建一个字典,而只留下另一个字典。

答案 2 :(得分:2)

没有什么比一个好的功能性单线:

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

答案 3 :(得分:0)

可以尝试扩展:

list_a.extend(list_b)