将元组分配和修改为Python Dictionary Keys的值

时间:2013-10-29 23:50:27

标签: python dictionary tuples

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

3 个答案:

答案 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