2009-04-29 76 views
1

這是一個偉大的底漆,但沒有回答我需要什麼: Combining two sorted lists in Python合併列表的兩個列表 - Python的

我有兩個Python的列表,每個爲datetime,值對的列表:

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_list_c,對應於每個list_a,每個list_a具有來自list_x和value_a/value_x的每個日期時間。

獎勵:

在我的真正的程序,list_a實際上是像這樣一本字典中的列表。採取字典級別的答案將是:

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

我可以指出這一部分雖然。

+2

你爲什麼不使用字典而不是列表? – SilentGhost 2009-04-29 18:02:30

+0

我可以使用字典(或下面推薦的一套)。最後,儘管它需要成爲一個列表,因爲JSON會尋找它。字典答案我很好。即使我解決了這個問題,下面的答案仍然不是100%。 – 2009-04-29 21:33:40

回答

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) 
3

「我希望做一個列表,list_c,對應於具有從list_x和value_a/value_x每一日期時間每個list_a。」

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']) 

這可能會稍微快一點,因爲它只爲一個查找字典,而另一個列表單獨存在。

0

能試着延長:

list_a.extend(list_b) 
2

沒有什麼比一個很好的功能性的一行:

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