【问题标题】: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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-24
          • 1970-01-01
          • 1970-01-01
          • 2014-01-05
          • 2019-03-28
          • 1970-01-01
          相关资源
          最近更新 更多