不要使用字典理解
get not working with dictionary comprehension
创建一个包含给定字符串中每个字符出现频率的字典
str1 = "peter piper picked a peck of pickled peppers"
freq = {}
freq2 = {}
for c in str1:
freq[c] = freq.get(c, 0) + 1
freq2 = {c: freq2.get(c, 0) + 1 for c in str1}
print(freq)
print(freq2)
输出
{'p': 9, 'e': 8, 't': 1, 'r': 3, ' ': 7, 'i': 3, 'c': 3, 'k': 3, 'd': 2, 'a': 1, 'o': 1, 'f': 1, >'l': 1, 's': 1}
{'p': 1, 'e': 1, 't': 1, 'r': 1, ' ': 1, 'i': 1, 'c': 1, 'k': 1, 'd': 1, 'a': 1, 'o': 1, 'f': 1, >'l': 1, 's': 1}
我只是想知道为什么字典理解不能给我正确的答案?
当使用字典理解循环时,freq2
尚未更新并且所有值都是 non-existent 所以 get
returns 0
(而你添加 1
,因此分配给键的值是 1
到 新字典 ).
只有字典理解后,freq2
才会更新(用字典理解创建的字典)。
步骤是:
- 在第 5 行;
freq2
为空
- 在第 6 行;首先,通过循环
freq2
空字典创建一个新字典。然后,那个新字典被分配给 freq2
创建一个包含给定字符串中每个字符出现频率的字典
str1 = "peter piper picked a peck of pickled peppers"
freq = {}
freq2 = {}
for c in str1:
freq[c] = freq.get(c, 0) + 1
freq2 = {c: freq2.get(c, 0) + 1 for c in str1}
print(freq)
print(freq2)
输出
{'p': 9, 'e': 8, 't': 1, 'r': 3, ' ': 7, 'i': 3, 'c': 3, 'k': 3, 'd': 2, 'a': 1, 'o': 1, 'f': 1, >'l': 1, 's': 1}
{'p': 1, 'e': 1, 't': 1, 'r': 1, ' ': 1, 'i': 1, 'c': 1, 'k': 1, 'd': 1, 'a': 1, 'o': 1, 'f': 1, >'l': 1, 's': 1}
我只是想知道为什么字典理解不能给我正确的答案?
当使用字典理解循环时,freq2
尚未更新并且所有值都是 non-existent 所以 get
returns 0
(而你添加 1
,因此分配给键的值是 1
到 新字典 ).
只有字典理解后,freq2
才会更新(用字典理解创建的字典)。
步骤是:
- 在第 5 行;
freq2
为空 - 在第 6 行;首先,通过循环
freq2
空字典创建一个新字典。然后,那个新字典被分配给freq2