1

我正在尝试使用以下代码创建字典。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] 添加到元组的第二个元素。我的代码不能按原样工作。任何想法如何解决这个问题?

谢谢,朱奈德

4

3 回答 3

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

因此,您希望您的值是 a list,初始化为[0,0]。这是使用defaultdict.

from collections import defaultdict

d = defaultdict(lambda:[0,0])
#d['key'][0] += 1
#etc
于 2013-10-30T00:05:00.020 回答
1

元组是不可变的,因此永远不会起作用。这意味着您在创建它们后无法修改它们,您需要用新元组替换整个值。

您可以使用 adefaultdict更优雅地处理初始值的设置。

我有一种暗示collections.Counter,对于您在这里想要实现的任何目标,a 都将是一个更合适的数据结构,但是您将不得不更多地解释您的用例,以便我继续......

于 2013-10-29T23:53:26.647 回答
1

Python 的元组(如(0,0))是不可变的。它们无法更新。您可以将其替换d[item[0]] = [0, 0]为使用列表并使其正常工作。

于 2013-10-29T23:53:46.807 回答