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,则将条件更改为