dPdms - 8 months ago 68

Python Question

I have a question about dic.has_key

my code is

`def insertToDic(dic,comSick):`

for datum in comSick :

if dic.has_key(datum):

dic[datum]+=1

else :

dic[datum] =1

if comSick is

`comSick=[(A,B),(A,C),(B,A)]`

dic will be

`dic = {(A,B) : 1, (A,C) : 1, (B,A) : 1}`

but what I want is unordered key (which means (A,B) = (B,A))

`dic = {(A,B) : 2, (A,C) : 1} <-- this is what I want`

what should I do?

Answer

Try this:

```
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)
```

I made some changes. I sorted the datum before updating the dictionary. This ensures that one of `(A,B)`

and `(B,A)`

will be changed to the other. It is not clear what `A`

and `B`

are, so `B`

may be lower than `A`

. Did you mean the strings `'A'`

and `'B'`

? That's what I used.

I also changed how you increment the value. The `get()`

method will return the current value if it exists or the given default value if it doesn't--in this case, zero.

Also note that the final dictionary has no inherent order, so you may get the answer `{('A', 'C'): 1, ('A', 'B'): 2}`

, which is what I got in my Python 3.5.2 in Anaconda.