[英]Fastest way to match two list fields python
我在最新的 python 腳本中遇到了時間問題。 本質上,我有兩個列表,例如 List1: ([a,1],[b,2])
List2: ([a,3],[b,4])
現在在上面的示例中,我在每個列表中提供了兩個條目。 然而,實際上大約有 150,000 個。
在我當前的腳本中,我從第一個列表[a]
中檢索第一個字段並遍歷整個 List2 直到匹配。 然后附加兩個列表條目。
最終結果將是: ([a,1,3],[b,2,4])
但是,鑒於列表的大小,這將永遠持續下去。
有沒有辦法我可以使用 list1 [a]
的字段並在恆定時間內檢索 list2 中具有[a]
所有條目
我在網上看到了一些建議集的答案,但我不確定如何實現一個並使用它來解決上述解決方案。
任何幫助,將不勝感激。
進一步的例子:
l1=(['abc123','hi'], ['efg456','bye'])
- l1 有大約 2000 個元組
l2=(['abc123','letter'],['abc123','john'],['abc123','leaf'])
- l2 有大約 100,000+ 個元組
Output: l3=(['abc123','hi','letter'],['abc123','hi','john'],['abc123','hi','leaf'])
如果您a
和b
值是唯一的,您可以將“列表”(您擁有的實際上是列表元組,而不是列表列表)轉換為字典,然后將它們合並。 例如:
l1 = (['a', 1], ['b', 2], ['c', 5])
l2 = (['a', 3], ['b', 4])
d1 = { k : [v] for [k, v] in l1 }
d2 = { k : [v] for [k, v] in l2 }
for k in d1.keys():
d1[k] += d2.get(k, [])
print(d1)
Output:
{'a': [1, 3], 'b': [2, 4], 'c': [5]}
您可以使用推導將該字典轉換回列表元組:
print(tuple([k, *v] for k, v in d1.items()))
Output:
(['a', 1, 3], ['b', 2, 4], ['c', 5])
沒那么難,只需對 list1 使用一個 dict,對 list2 使用一個 for 循環。
dict1 = {key1: [value1] for key1, value1 in list1} # convert list1 to dict
# and the values should be converted to dict
for key2, value2 in list2:
try:
dict1[key2].append(value2)
except KeyError:
continue # I'm not sure what do you want to do if the keys in list2 didn't exist in list1, so just ignore them
list3 = tuple([key3, *value3] for key3, value3 in dict1.items())
print(list3)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.