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