![](/img/trans.png)
[英]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.