分配和修改元组作为 Python 字典键的值



我正在尝试使用以下代码创建字典。 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

最新更新