我对dic.has_key
有疑问我的代码是
def insertToDic(dic,comSick):
for datum in comSick :
if dic.has_key(datum):
dic[datum]+=1
else :
dic[datum] =1
如果comSick是
comSick=[(A,B),(A,C),(B,A)]
dic将是
dic = {(A,B) : 1, (A,C) : 1, (B,A) : 1}
但我想要的是无序密钥(这意味着(A,B)=(B,A))
dic = {(A,B) : 2, (A,C) : 1} <-- this is what I want
我该怎么办?
答案 0 :(得分:1)
试试这个:
def insertToDic(dic,comSick):
for datum in comSick :
sorted_datum = tuple(sorted(datum))
dic[sorted_datum] = dic.get(sorted_datum, 0) + 1
comSick=[('A', 'B'), ('A', 'C'), ('B', 'A')]
dic = {}
insertToDic(dic, comSick)
print(dic)
我做了一些改变。我在更新字典之前对数据进行了排序。这可确保将(A,B)
和(B,A)
中的一个更改为另一个。目前尚不清楚A
和B
是什么,因此B
可能低于A
。您的意思是字符串'A'
和'B'
吗?这就是我用过的东西。
我还改变了你增加值的方式。 get()
方法将返回当前值(如果存在)或给定的默认值(如果不存在) - 在这种情况下为零。
另请注意,最终字典没有固有的顺序,因此您可以得到答案{('A', 'C'): 1, ('A', 'B'): 2}
,这是我在Anaconda的Python 3.5.2中得到的。
答案 1 :(得分:1)
使用
frozenset(('A','B'))
作为关键。