功能和字典格式的理解

时间:2016-05-02 08:28:57

标签: python function dictionary

嗨,我需要理解这一行

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

2 个答案:

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

由于Counterdict的子类,因此文档中陈述的不变量仍然会得到满足。

答案 1 :(得分:0)

正如documentation中提到的,如果在dict中定义get,则字典key的方法将返回与key(第一个参数)关联的值。否则,它返回default值(第二个参数)。

get(dict, key, default=None):
    if key in dict:
        return dict[key]
    return default

在您的情况下,该函数计算序列中每个元素的出现次数。