[英]How to remove duplicated keys in reverse order from dictionary (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.