簡體   English   中英

避免或消除Python字典中的重復/反向結果

[英]Avoid or eliminate duplicated/reverse results in a dictionary in Python

在此處輸入圖片說明

我正在尋找csv中兩列中的對。 如果找到AB和BA,則在字典中僅包含AB。 我寫了以下腳本:

dataset = list(zip(col1,col2))
for a,b in dataset:
    if (a,b) and (b,a) in dataset:
        dic [a] = b 

但是顯然我只需要一個,輸出是:

{'A': 'B', 'C': 'B', 'B': 'A', 'D': 'C', 'F': 'C', 'H': 'C', 'J': 'X', 'X': 'J'}

如您所見,它有時是重復的(例如,D:C是正確的,但它僅出現一次,我不知道為什么)

如何避免重復或從字典中消除“反向形式”?

嘗試一個簡單的加法:

if (a,b) and (b,a) in dataset \
    and a < b :

這只會使您成為兩者之一。 它還假定(如您的示例中)沒有兩次包含相同值的行。

您不必在每個步驟中都檢查兩個對。 相反,您僅需要檢查b是否在字典中,如果是,則檢查dic[b] != a

原因是我們總是將col1作為鍵添加,因此我們只需要查看反轉值是否已添加。

col1 = ['A', 'C', 'B', 'D', 'X', 'F', 'H', 'J']
col2 = ['B', 'B', 'A', 'C', 'J', 'C', 'C', 'X']

dic = {}
for a, b in zip(col1, col2):
    if (b not in dic) or (dic[b] != a):
        dic[a] = b

#{'A': 'B', 'C': 'B', 'D': 'C', 'F': 'C', 'H': 'C', 'X': 'J'}

但是,如果您只想在兩個版本同時存在的情況下,每對都保留一份副本,則需要一種稍微不同的方法。

首先創建一個包含所有常見對的字典。 然后像以前一樣進行迭代,並且只有在兩個版本都存在時才添加。 使用與上述相同的邏輯以避免重復。

d = dict(zip(col1, col2))
dic = {}
for a, b in d.items():
    if (a in d) and (b in d) and (d[a] == b) and (d[b] == a):
        if (b not in dic) or (dic[b] != a):
            dic[a] = b

#{'A': 'B', 'J': 'X'}

暫無
暫無

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

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