python字典(无序选择键)

时间:2016-08-18 00:43:29

标签: python dictionary unordered

我对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

我该怎么办?

2 个答案:

答案 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)中的一个更改为另一个。目前尚不清楚AB是什么,因此B可能低于A。您的意思是字符串'A''B'吗?这就是我用过的东西。

我还改变了你增加值的方式。 get()方法将返回当前值(如果存在)或给定的默认值(如果不存在) - 在这种情况下为零。

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

答案 1 :(得分:1)

使用

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

作为关键。