[英]Python join two lists with first index in common
我有兩個帶有以下數據的 python 列表
list1 = [[datetime.date(2019, 12, 11), 4], [datetime.date(2019, 12, 14), 3]]
list2 = [[datetime.date(2019, 12, 14), 2], [datetime.date(2019, 12, 16), 9]]
我必須將兩個列表與第一個索引相結合,即datetime.date
字段是通用的。 此外,如果兩者的第一個索引不匹配,請將值設置為。
此外,如果列表中的任何一個為空,則將相應的位置設置為 0。
結果將是
list_new = [
[datetime.date(2019, 12, 11), 4, 0],
[datetime.date(2019, 12, 14), 3, 2],
[datetime.date(2019, 12, 16), 0, 9]
]
我嘗試使用zip
類的
new_list = [a + [b[1]] for (a, b) in zip(list1, list2)]
但這似乎不起作用。
簡單(非最佳)單線:
[[element, dict(list1).get(element, 0), dict(list2).get(element, 0)] for element in set([l[0] for l in list1 + list2])]
解釋:
>>> s = set([l[0] for l in list1 + list2])
>>> s
set([datetime.date(2019, 12, 11), datetime.date(2019, 12, 14), datetime.date(2019, 12, 16)])
>>> d1 = dict(list1)
>>> d1
{datetime.date(2019, 12, 11): 4, datetime.date(2019, 12, 14): 3}
>>> d2 = dict(list2)
>>> d2
{datetime.date(2019, 12, 14): 2, datetime.date(2019, 12, 16): 9}
>>> [[element] + [d1.get(element, 0)] + [d2.get(element, 0)] for element in s]
[[datetime.date(2019, 12, 11), 4, 0], [datetime.date(2019, 12, 14), 3, 2], [datetime.date(2019, 12, 16), 0, 9]]
此合並list1
和list2
使用heapq.merge
(假設日期在每個列表中排序並且在每個列表中沒有重復的日期):
import datetime
from heapq import merge
from pprint import pprint
list1 = [[datetime.date(2019, 12, 11), 4], [datetime.date(2019, 12, 14), 3]]
list2 = [[datetime.date(2019, 12, 14), 2], [datetime.date(2019, 12, 16), 9]]
i1 = ((1, v) for v in list1)
i2 = ((2, v) for v in list2)
d = {}
for v in merge(i1, i2, key=lambda k: k[1]):
d.setdefault(v[1][0], {})[v[0]] = v[1][1]
out = []
for k, v in d.items():
out.append((k, *[v.get(i, 0) for i in range(1, 3)]))
pprint(out)
打印:
[(datetime.date(2019, 12, 11), 4, 0),
(datetime.date(2019, 12, 14), 3, 2),
(datetime.date(2019, 12, 16), 0, 9)]
將兩個列表列表轉換為字典:
dict1 = dict(list1) dict2 = dict(list2)
將新列表形成為:
new_list = [[a,b,dict2.get(a,0)] for a,b in dict1.iteritems()] + [[a,0,b] for a,b in dict2.iteritems() 如果不是在dict1]
你能更清楚你想要做什么嗎?
據我了解,您想要創建一個新的嵌套列表,其中該列表中的每個項目都是輸入列表中具有相同日期時間值的項目的組合。 其他位置說明什么?
在你的例子中:
list_new = [
[datetime.date(2019, 12, 11), 4, 0],
[datetime.date(2019, 12, 14), 3, 2],
[datetime.date(2019, 12, 16), 0, 9]
]
這些條目中的4,0 3,2 0,9
對應什么?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.