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)
之一将更改为另一个。不清楚A
和B
是什么,所以B
可能低于A
。您是指字符串 'A'
和 'B'
吗?我就是这么用的。
我还更改了增加值的方式。 get()
方法将 return 当前值(如果存在)或给定的默认值(如果不存在)——在本例中为零。
另请注意,最终字典没有固有顺序,因此您可能会得到答案 {('A', 'C'): 1, ('A', 'B'): 2}
,这是我在 Anaconda 中的 Python 3.5.2 中得到的。
使用
frozenset(('A', 'B'))
作为密钥。
我有一个关于 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)
之一将更改为另一个。不清楚A
和B
是什么,所以B
可能低于A
。您是指字符串 'A'
和 'B'
吗?我就是这么用的。
我还更改了增加值的方式。 get()
方法将 return 当前值(如果存在)或给定的默认值(如果不存在)——在本例中为零。
另请注意,最终字典没有固有顺序,因此您可能会得到答案 {('A', 'C'): 1, ('A', 'B'): 2}
,这是我在 Anaconda 中的 Python 3.5.2 中得到的。
使用
frozenset(('A', 'B'))
作为密钥。