嗨,我需要理解这一行
freq[x] = freq.get(x,0) + 1
在下面的代码中以及它是如何工作的。我知道函数正在返回字典,但我需要知道这一行是如何工作的。
def get_frequency_dict(sequence):
"""
Returns a dictionary where the keys are elements of the sequence
and the values are integer counts, for the number of times that
an element is repeated in the sequence.
sequence: string or list
return: dictionary
"""
# freqs: dictionary (element_type -> int)
freq = {}
for x in sequence:
freq[x] = freq.get(x,0) + 1
return freq
答案 0 :(得分:1)
该行使用dict.get()
method,它返回给定键的值或默认值。
所以行
freq[x] = freq.get(x,0) + 1
如果在字典中找不到1
,则存储x
(因此freq.get(x, 0)
返回0)或者增加已存在的值。实际上,这会计算sequence
中的所有值,仅在第一次遇到该值时为任何值创建键。这样您就不必将所有可能的值预设为值为0
的键。
整个函数可以简单地替换为collections.Counter()
instance:
from collections import Counter
def get_frequency_dict(sequence):
"""
Returns a dictionary where the keys are elements of the sequence
and the values are integer counts, for the number of times that
an element is repeated in the sequence.
sequence: string or list
return: dictionary
"""
return Counter(sequence)
由于Counter
是dict
的子类,因此文档中陈述的不变量仍然会得到满足。
答案 1 :(得分:0)
正如documentation中提到的,如果在dict中定义get
,则字典key
的方法将返回与key
(第一个参数)关联的值。否则,它返回default
值(第二个参数)。
get(dict, key, default=None):
if key in dict:
return dict[key]
return default
在您的情况下,该函数计算序列中每个元素的出现次数。