具有if-else条件的Dict理解似乎根本没有使用if块。即使不应该,它总是转到else块。
我正在尝试使用dict理解和python中的if条件来确定字符串中字符出现的次数。但是,如果似乎永远无法满足if条件(实际上应该满足)。似乎只有else条件可以满足
def letter_count(input_str):
letter_count_map = {}
letter_count_map = {letter: letter_count_map[letter]+1 if letter in
letter_count_map.keys() else 1
for letter in input_str}
print(letter_count_map)
letter_count("serendipity")
预期结果:
{'s': 1, 'e': 2, 'r': 1, 'n': 1, 'd': 1, 'i': 2, 'p': 1, 't': 1, 'y': 1}
实际结果:
{'s': 1, 'e': 1, 'r': 1, 'n': 1, 'd': 1, 'i': 1, 'p': 1, 't': 1, 'y': 1}
我在做什么错了?
答案 0 :(得分:2)
letter_count_map
的理解之后,才会为 dict
分配新值。在此之前,它只是空的dict
,因此keys()
中将没有任何内容。您尝试执行的操作应该改为循环而不是理解:
letter_count_map = {}
for letter in input_str:
letter_count_map[letter] = letter_count_map[letter]+1 if letter in letter_count_map.keys() else 1
答案 1 :(得分:1)
您还可以使用defaultdict
来简化代码。
from collections import defaultdict
def letter_count(input_str):
letter_count_map = defaultdict(lambda: 0)
for c in input_str:
letter_count_map[c] += 1
print(letter_count_map)
letter_count("serendipity")