Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为Python字典添加新字段_Python_Dictionary_Counter - Fatal编程技术网

为Python字典添加新字段

为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][

我有一个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][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
。但这样您就失去了
计数器的功能。请忘记这一点。我意识到我不明白这个问题。该睡觉了:)这正是我想要的——谢谢。对不起,其他回答者没有把我的问题表达得更清楚。