为 Python 词典添加新字段

Add new field for Python dictionary

我有一个字典,我用它 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)

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

你最好创建一个全新的字典,以获得额外的嵌套字典:

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

无需创建新的 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}}

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

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})}