2013-10-29 72 views
1

我想用下面的代碼創建一個字典。 d = {}指定和修改元組作爲Python的字典鍵值

for item in H: 
    if not item[0] in d: 
     d[item[0]]=(0,0) 
    d[item[0]][0]+=1 
    d[item[0]][1]+=item[1] 

所以基本上在這裏,我要一本字典,例如,如果一個關鍵不在字典,它會在關鍵的價值等同於元組(0,0),然後相應地修改元組的元素(每當鍵出現時,將元組的第一個元素加1,並在每次鍵出現時,將元素[1](一個整數)加到元組的第二個元素。代碼不工作,因爲它是。任何想法,這可怎麼固定?

感謝, 朱奈德

回答

1

元組是IMM無法使用,以至於無法工作。這意味着你不能在創建它們後修改它們,你需要用一個新的元組替換整個值。可以使用defaultdict來更優雅地處理初始值的設置。

我有一個暗示一個collections.Counter將是任何你正試圖在這裏實現更合適的數據結構,但你必須解釋你的用例多一點我繼續......

1

Python的元組(如(0,0))是不可變的。他們無法更新。你可以用d[item[0]] = [0, 0]替換它來使用列表並使其工作。

1

正如其他人所說,tuple是一個不可變的數據類型。

In [20]: a = (0,0) 

In [21]: a[0]+=1 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
/home/xxx/<ipython-input-21-394ba21d2aec> in <module>() 
----> 1 a[0]+=1 

TypeError: 'tuple' object does not support item assignment 

所以,你要你的價值觀是一個list,初始化爲[0,0]。這是使用defaultdict來實現的更簡潔的方式。

from collections import defaultdict 

d = defaultdict(lambda:[0,0]) 
#d['key'][0] += 1 
#etc