【问题标题】:Assigning and modifying tuples as values for Python Dictionary Keys分配和修改元组作为 Python 字典键的值
【发布时间】:2013-10-29 23:50:27
【问题描述】:
我正在尝试使用以下代码创建字典。
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]添加到元组的第二个元素。我的代码无法正常工作。关于如何解决此问题的任何想法?
谢谢,
朱奈德
【问题讨论】:
标签:
python
dictionary
tuples
【解决方案1】:
元组是不可变的,因此永远不会起作用。这意味着您在创建它们后无法修改它们,您需要用新元组替换整个值。
您可以使用defaultdict 更优雅地处理初始值的设置。
我有一种暗示,collections.Counter 将是一个更适合您在这里尝试实现的数据结构,但您必须更多地解释您的用例,以便我继续......
【解决方案2】:
Python 的元组(如(0,0))是不可变的。它们无法更新。您可以将其替换为 d[item[0]] = [0, 0] 以使用列表并使其正常工作。
【解决方案3】:
正如其他人所说,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