2014-11-04 114 views
0

我想檢查myList中MyNewFile的內容。它是我的代碼,但它不會那麼好。Python檢查數組中的重複項

myList=[{"text": "1"},{"text": "2"},{"text": "3"},{"text": "4"},{"text": "5"},{"text": "6"}] 
myNewFile=[{"text": "10"},{"text": "5"},{"text": "7"},{"text": "8"}] 

for index in range(len(myNewFile)): 
    if (myList[index]["text"]==myNewFile[index]["text"]): 
     print "same" 
    else: 
     print "input" 

最終結果:

其具有一個相同的值(兩者都具有文本= 「5」)。任何消化?謝謝

+0

這是你的實際碼嗎? 'len(myFile)'應該給你一個NameError,因爲'myFile'不存在。 – Kevin 2014-11-04 15:31:35

+0

鑰匙總是一樣嗎?你可以把這些值或項目放入一個集合並使用set操作嗎? – dm03514 2014-11-04 15:31:52

+0

您的代碼檢查具有相同索引**的2個條目**是否相同。如果myFile的長度過大,那麼您將遇到超出範圍的問題。 – stefaanv 2014-11-04 15:37:26

回答

1

最簡單的方法是將兩個列表轉換爲集合,然後設置交集。

  1. 對於列表中的每一個字典,得到items()列表,每一元素傳遞給set功能。

    set1 = set(item for d in myList for item in d.items()) 
    set2 = set(item for d in myNewList for item in d.items()) 
    

此時套是這樣的

set([('text', '5'), ('text', '4'), ('text', '6'), ('text', '1'), ('text', '3'), ('text', '2')]) 
set([('text', '7'), ('text', '10'), ('text', '5'), ('text', '8')]) 
  • 然後,只需做交叉口&操作者,並且重建原始詞典與詞典理解,像這樣

    print {item[0]:item[1] for item in set1 & set2} 
    # {'text': '5'} 
    
  • +0

    使用'set1.intersection(set2)'應該比'&'更具可讀性。 – NickAb 2014-11-04 15:48:29

    +0

    謝謝, 它對我更可讀。乾杯 – 2014-11-04 16:00:55