簡體   English   中英

如何檢查一個列表/字典的元素是否存在於python中的另一個列表/字典中

[英]How to check if elements of one list/dict present in another list/dict in python

這是一個場景,我正在檢查A中的元素是否存在於B中,而這段代碼可以工作,當我閱讀數百萬行時需要花費大量時間。 有效的方法是將A和B中的每個列表作為字典,並查看它們是否存在於彼此中。 但我無法想到一種簡單的字典查找方式。 這是針對dict A中的每個鍵值對,我想檢查dictB中是否存在該鍵值對

A = [['A',[1,2,3]],['D',[3,4]],['E',[6,7]]]

B=  [['A',[1,2,3]],['E',[6,7]],['F',[8,9]]]

count = 0

for line in A:

  if len(line[1]) > 1:

     if line in B:

       count = count + 1

print count
  1. 將列表轉換為元組
  2. 將元組列表轉換為集合
  3. 相交兩組
  4. 打印交叉點的長度

例:

A = [['A',[1,2,3]],['D',[3,4]],['E',[6,7]]] 
B = [['A',[1,2,3]],['E',[6,7]],['F',[8,9]]]

A_set = set((a, tuple(b)) for a, b in A)
B_set = set((a, tuple(b)) for a, b in B)
print len(A_set & B_set)

您可以嘗試使用列表理解,並以此為基礎:

a = [[1], [5], [7]]
b = [[5], [7], [0]]
r = [x for x in a if x in b]

使AB成為詞典:

dA = dict(A)
dB = dict(B)

然后,只需檢查鍵和值是否匹配:

count = 0
for k,v in dA.iteritems():
    if dB.get(k) == v:
        count += 1

你需要對B做一些預處理,所以它的元素是不可變的。

def deep_tuple(x):
    if type(x) in [type(()), type([])]:
        return tuple(map(deep_tuple,x))
    return x


A = ['A',[1,2,3]],['D',[3,4]],['E',[6,7]]
B = ['A',[1,2,3]],['E',[6,7]],['F',[8,9]]]
B = set(deep_tuple(B))
count = 0
for line in A:
  if len(line[1]) > 1:
     if line in B: 
       count = count + 1
print count

將B組成一組。 一組中的查找是O(1),否則與O(| B |)相比。 該操作的總體復雜度將與O(| A |)成比例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM