2017-09-27 137 views
0

我有下面的字典,我试图使用下面的一段代码删除重复项。Python - 字典重复值

vertex = {1: (4.0,7.0), 2: (1.0,4.0), 3: (5.0,8.0), 4: (5.0,6.0), 5: (3.0,8.0), 6: (4.0,7.0), 7: (1.0,4.0), 8: (5.0,8.0), 9: (4.0,2.0), 10: (4.0,8.0), 11: (4.0,7.0), 12: (4.0,2.0), 13: (4.0,8.0), 14: (1.0,4.0), 15: (5.0,8.0), 16: (4.0,4.0), 17: (4.0,2.0), 18: (4.0,8.0), 19: (2.0,2.0), 20: (5.0,5.0), 21: (4.0,7.0), 22: (4.0,2.0), 23: (4.0,8.0), 24: (5.0,6.0), 25: (3.0,8.0)} 

result = {} 
for key,value in vertex.items(): 
    if value not in result.values(): 
       result[key] = value 
print result 

重复的值仍然被添加到结果中。

[] (4.0,7.0) - initial result and value to be checked if its already in result 

[(4.0,7.0)] (1.0,4.0) 

[(4.0,7.0), (1.0,4.0)] (5.0,8.0) 

[(4.0,7.0), (1.0,4.0), (5.0,8.0)] (5.0,6.0) 

[(4.0,7.0), (1.0,4.0), (5.0,8.0), (5.0,6.0)] (3.0,8.0) 

[(4.0,7.0), (1.0,4.0), (5.0,8.0), (5.0,6.0), (3.0,8.0)] (4.0,7.0) - here (4.0,7.0) is being checked and its getting added though it is already there in it as shown in next step. 


[(4.0,7.0), (1.0,4.0), (5.0,8.0), (5.0,6.0), (3.0,8.0), (4.0,7.0)] (1.0,4.0) 

任何人都可以告诉我究竟在哪里出错了吗?我无法弄清楚这一点! 谢谢。

+2

我跑,你已经张贴了相同的代码,它似乎为我工作。这是我的输出结果{1:(4.0,7.0),2:(1.0,4.0),3:(5.0,8.0),4:(5.0,6.0),5:(3.0,8.0),9:(4.0 ,2.0),10:(4.0,8.0),16:(4.0,4.0),19:(2.0,2.0),20:(5.0,5.0)}'仔细检查您的缩进 –

+0

请注意,这预计是非-deterministic。字典的迭代顺序不能保证。如果你不在乎,双反转字典可能会更快。 – dhke

+0

所以,当我尝试手动输入和检查作为一个单独的代码,它工作正常。当它作为字典/列表中相同元素的另一个程序比较的一部分执行时,就像它们不相等一样。我在某处失去了某些东西。仍试图弄清楚什么是错的。 – buddingengineer

回答

0

既然你正在处理独特的元组,set()在这种情况下可以执行得更好。试试这个:

vertex_set = set() 
results = {} 
for key, value in vertex.items(): 
    if not value in vertex_set: 
     result[key] = value 
     vertex_set.add(value) 

更多关于套,参考https://docs.python.org/2/library/sets.html