听写理解无法像我想的那样工作。我究竟做错了什么?

时间:2019-05-30 02:34:08

标签: python python-3.x dictionary

具有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}

我在做什么错了?

2 个答案:

答案 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")