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