python 字典(无序选择键)

python dictionary (unordered selections key)

我有一个关于 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

我该怎么办?

试试这个:

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) 之一将更改为另一个。不清楚AB是什么,所以B可能低于A。您是指字符串 'A''B' 吗?我就是这么用的。

我还更改了增加值的方式。 get() 方法将 return 当前值(如果存在)或给定的默认值(如果不存在)——在本例中为零。

另请注意,最终字典没有固有顺序,因此您可能会得到答案 {('A', 'C'): 1, ('A', 'B'): 2},这是我在 Anaconda 中的 Python 3.5.2 中得到的。

使用

frozenset(('A', 'B'))

作为密钥。