为Python字典添加新字段
我有一个dict,我用它来计算每个键的词频,例如为Python字典添加新字段,python,dictionary,counter,Python,Dictionary,Counter,我有一个dict,我用它来计算每个键的词频,例如'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][
'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)
我需要移除计数器对象吗?如何创建新值以及如何访问此值?您最好创建一个全新的字典,以获得额外的嵌套dict:
dct = {key: {k: {v: 0} for k, v in values.items()} for key, values in dct.items()}
无需创建新的
dict
,您就可以使用计数器内部操作当前的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})
print(dct)
>>> {'A': Counter({'food': 666, 'menu': 19, 'good': 15}), 'B': Counter({'chicken': 10, 'one': 5})}
>>> {'A': Counter({'food': 30, 'menu': 19, 'good': 15, 'new_food': 0}), 'B': Counter({'chicken': 10, 'one': 5})}
要修改计数器dict中的值,可以执行以下操作:
for k, v in dct:
if "food" in v:
v["food"] = 666
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})
>>> B Counter({'chicken': 10, 'one': 5})
print(dct)
>>> {'A': Counter({'food': 666, 'menu': 19, 'good': 15}), 'B': Counter({'chicken': 10, 'one': 5})}
>>> {'A': Counter({'food': 30, 'menu': 19, 'good': 15, 'new_food': 0}), 'B': Counter({'chicken': 10, 'one': 5})}
如果您想将新元素添加到计数器dict
中,可以执行以下操作:
for k, v in dct:
if "food" in v:
v["food"] = 666
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})
>>> B Counter({'chicken': 10, 'one': 5})
print(dct)
>>> {'A': Counter({'food': 666, 'menu': 19, 'good': 15}), 'B': Counter({'chicken': 10, 'one': 5})}
>>> {'A': Counter({'food': 30, 'menu': 19, 'good': 15, 'new_food': 0}), 'B': Counter({'chicken': 10, 'one': 5})}
否则,如果您想要有一个新的“常规”
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})}
对于it1,it2在值中。items():
值的值是一个计数器。您不能将其拆分为it1
和it2
。但这样您就失去了计数器的功能。请忘记这一点。我意识到我不明白这个问题。该睡觉了:)这正是我想要的——谢谢。对不起,其他回答者没有把我的问题表达得更清楚。