我正在尝试使用以下代码创建字典。 d={}
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,并添加 item[1], 这是一个整数,每次出现键时到元组的第二个元素。我的代码无法正常工作。关于如何解决这个问题的任何想法?
谢谢朱奈德
元组是不可变的,所以永远不起作用。 这意味着您无法在创建它们后修改它们,您需要用新元组替换整个值。
您可以使用defaultdict
更优雅地处理初始值的设置。
我有一个暗示,对于您在这里要实现的任何东西来说,collections.Counter
都将是一个更合适的数据结构,但是您必须更多地解释您的用例,以便我继续...
Python 的元组(如 (0,0)
元组)是不可变的。它们无法更新。您可以将其替换为d[item[0]] = [0, 0]
以使用列表并使其工作。
正如其他人所说,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