这是一本很棒的入门书,但没有回答我的需要: 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]]
加成:
在我的真实程序中,list_a实际上是字典中的列表。对词典级别的回答是:
dict = {object_a: [['1241000884000', 3], ['1241004212000', 4], ['1241006473000', 11]], object_b: [['1241004212000', 2]]}
我可以解决这个问题。
答案 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)