【问题标题】:Add new field for Python dictionary为 Python 字典添加新字段
【发布时间】:2017-03-22 21:49:33
【问题描述】:

我有一个字典,我使用Counter 来获取每个键的词频,例如'A''B'

dict = {'A': Counter({'food': 30, 'menu': 19, 'good': 15}), 'B': Counter({'one': 5, 'chicken': 10})}

我希望能够添加一个新字段,以便每个术语都有另一个值。

我试过了:

for key, values in dict.items():
    for it1, it2 in values:
         dict[key][it1][it2] = 0

但我收到:

ValueError: too many values to unpack (expected 2)

我需要删除 Counter 对象吗?如何创建新值以及如何访问该值?

【问题讨论】:

  • for it1, it2 in values.items():
  • values 的值为一个计数器。您不能将其拆分为it1it2

标签: python dictionary counter


【解决方案1】:

你最好创建一个全新的字典,拥有额外的嵌套字典:

dct = {key: {k: {v: 0} for k, v in values.items()} for key, values in dct.items()}

【讨论】:

  • 但是你失去了Counter的能力。
  • 算了。我意识到我不明白这个问题。该睡觉了:)
  • 这正是我想要的——谢谢。很抱歉其他回答者没有更清楚地表达我的问题。
【解决方案2】:

我希望我能理解你的问题。您想在柜台上再添加一件商品吗?如果是这种情况,您可以通过更新计数器对象来做到这一点。随着您不断更新,计数会增加。

mydict = {'A': Counter({'food': 30, 'menu': 19, 'good': 15}), 'B': Counter({'one': 5, 'chicken': 10})}
mydict['A'].update(['price'])
mydict['B'].update(['cow'])
print mydict

{'A': Counter({'food': 30, 'menu': 19, 'good': 15, 'price': 1}), 'B': Counter({'chicken': 10, 'one': 5, 'cow': 1})}

如果你再次更新

mydict['A'].update(['price'])
mydict['B'].update(['cow'])
print mydict

将导致

{'A': Counter({'food': 30, 'menu': 19, 'good': 15, 'price': 2}), 'B': Counter({'chicken': 10, 'one': 5, 'cow': 2})}

【讨论】:

    【解决方案3】:

    无需创建新的dict,您就可以在内部使用Counter 来操作当前的dict

    您可以像这样打印您当前的项目:

    dct = {'A': Counter({'food': 30, 'menu': 19, 'good': 15}), 'B': Counter({'one': 5, 'chicken': 10})}
    
    for k, v in dct.items():
        print(k, v)
    

    输出:

    >>> A Counter({'food': 30, 'menu': 19, 'good': 15})
    >>> B Counter({'chicken': 10, 'one': 5})
    

    要修改Counter dict 中的值,您可以执行以下操作:

    for k, v in dct:
        if "food" in v:
            v["food"] = 666
    

    输出:

    print(dct)
    
    >>> {'A': Counter({'food': 666, 'menu': 19, 'good': 15}), 'B': Counter({'chicken': 10, 'one': 5})}
    

    如果您想向Counter dict 添加新元素,您可以执行以下操作:

    for k, v in dct.items():
        if "food" in v:
            v.update({"new_food":0})
    
    print(dct)
    

    输出:

    >>> {'A': Counter({'food': 30, 'menu': 19, 'good': 15, 'new_food': 0}), 'B': Counter({'chicken': 10, 'one': 5})}
    

    否则如果你想拥有一个新的"regular"dict你可以使用dict comprehension

    new_dct = {k:{key:val for key,val in v.items()} for k,v in dct.items()}
    
    print(new_dct)
    
    >>> {'A': {'food': 30, 'menu': 19, 'good': 15}, 'B': {'chicken': 10, 'one': 5}}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多