代码之家  ›  专栏  ›  技术社区  ›  Adam Nelson

合并两个列表列表-python

  •  1
  • Adam Nelson  · 技术社区  · 17 年前

    这是一本很好的入门书,但没有回答我需要的问题: 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. 实际上,有许多列表具有不同的键/值。
    2. 所有列表日期都在列表中。
    3. 我想制作一个列表,列表C,对应于每个列表A,其中包含列表X和值X中的每个日期时间。

    奖金:

    在我真正的程序中,list_a实际上是像这样的字典中的一个列表。将答案带到字典级别将是:

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

    不过,我能搞清楚那部分。

    4 回复  |  直到 14 年前
        1
  •  4
  •   user97370    17 年前

    这里有一些代码可以满足您的要求。你可以直接把你的配对列表变成一本字典。然后,可以通过相交键组找到共享的键。最后,在给定一组共享密钥的情况下,很容易构造结果字典。

    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)
    
        2
  •  3
  •   S.Lott    17 年前

    我想创建一个列表,列表“c”,对应于每个列表“a”,其中包含列表“x”中的每个日期时间和值“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'] )
    

    这可能稍微快一点,因为它只制作一个字典用于查找,而只保留另一个列表。

        3
  •  2
  •   sth    16 年前

    没有什么比得上一个功能良好的单线图:

    reduce(lambda l1,l2: l1 + l2, list)
    
        4
  •  0
  •   sth    16 年前

    可以尝试扩展:

    list_a.extend(list_b)