Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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_String_Python 2.7_Dictionary_Counter - Fatal编程技术网

Python 使用时字典值未按预期更新-=

Python 使用时字典值未按预期更新-=,python,string,python-2.7,dictionary,counter,Python,String,Python 2.7,Dictionary,Counter,我有一本字典和一个单词: check = {'a': 3, 'e': 1, 'p': 2, 'r': 1, 'u': 1, 't': 1} word = 'rapturerererer' 如果word中的所有字母都在check中,我希望运行一个测试。因此,我需要对所有用完的信件进行连续计数,并检查末尾是否有任何负片 我有代码,但它总是将值限制在0,并且从不返回负值: for letter in word: if check.get(letter): check[lett

我有一本字典和一个单词:

check = {'a': 3, 'e': 1, 'p': 2, 'r': 1, 'u': 1, 't': 1}
word = 'rapturerererer'
如果
word
中的所有字母都在
check
中,我希望运行一个测试。因此,我需要对所有用完的信件进行连续计数,并检查末尾是否有任何负片

我有代码,但它总是将值限制在0,并且从不返回负值:

for letter in word:
    if check.get(letter):
        check[letter] -= 1
print(check)

{'a': 2, 'p': 1, 'r': 0, 'e': 0, 't': 0, 'u': 0}
我期待的是:

{'a': 2, 'p': 1, 'r': -5, 'e': -4, 't': 0, 'u': 0}

有人能解释为什么这些值在0处停止吗?

您的错误发生是因为检查
if d.get(x)
评估值的性质(即它是0还是
False
-like),而不仅仅是键的存在

另一种方法是使用
集合。计数器
后跟字典理解:

from collections import Counter

check = {'a': 3, 'e': 1, 'p': 2, 'r': 1, 'u': 1, 't': 1}
word = 'rapturerererer'

word_count = Counter(word)

res = {k: check[k] - word_count[k] for k in check}

print(res)

{'a': 2, 'e': -3, 'p': 1, 'r': -5, 'u': 0, 't': 0}
这将起作用,因为
计数器
对象为未添加的键返回0值

if check.get(letter):
    check[letter] -= 1
如果check.get(letter)
不仅在
letter
丢失时失败;如果dict中的值为,则它也会失败
None
是错误的,
0
也是错误的。一旦达到
0
测试失败,不再发生递减

中使用

if letter in check:
    check[letter] -= 1

如果0
的计算结果为
False
-如果check.get(letter)不是None,则将条件更改为