代码之家  ›  专栏  ›  技术社区  ›  eozzy

了解python中的.get()方法[重复]

  •  61
  • eozzy  · 技术社区  · 15 年前

    这个问题已经有了答案:

    sentence = "The quick brown fox jumped over the lazy dog."
    characters = {}
    
    for character in sentence:
        characters[character] = characters.get(character, 0) + 1 
    
    print(characters)
    

    我不明白什么 characters.get(character, 0) + 1 是这样的,休息似乎很简单。

    5 回复  |  直到 7 年前
        1
  •  72
  •   Edgar Derby    7 年前

    这个 get 口述的方法(例如 characters )工作原理和索引dict一样,只是如果缺少键,而不是引发 KeyError 它返回默认值(如果调用 .get 只有一个参数,键,默认值是 None )。

    一个等价的python函数(其中 myget(d, k, v) 就像是 d.get(k, v) 可能是:

    def myget(d, k, v=None):
      try: return d[k]
      except KeyError: return v
    

    您问题中的示例代码显然试图计算每个字符的出现次数:如果它已经对给定的字符进行了计数, 得到 返回它(所以只增加一个),否则 得到 返回0(因此正确递增 1 在字符串中出现的第一个字符)。

        2
  •  20
  •   zeyad elharabi    11 年前

    为了理解正在发生的事情,让我们在 句子 字符串并跟踪它通过循环时发生的情况。

    记住,我们从一个空的开始 文字 词典

    characters = {}
    

    我选字母“E”。让我们传递字符“e”(在单词中找到) 这个 )第一次通过循环。我假设它是第一个通过循环的字符,我将用变量的值替换变量:

    for 'e' in "The quick brown fox jumped over the lazy dog.":
        {}['e'] = {}.get('e', 0) + 1 
    

    characters.get('e',0) 告诉python在字典中查找键“e”。如果找不到,则返回0。由于这是第一次通过循环传递“e”,因此字典中还没有找到字符“e”,因此 得到 方法返回0。然后将此0值添加到 1个 (出现在字符[字符]=characters.get(字符,0)中)+ 方程)。 在使用“e”字符完成第一个循环后,我们现在在字典中有这样一个条目:“e”:1

    词典现在是:

    characters = {'e': 1}
    

    现在,让我们通过同一个循环传递第二个“e”(在单词jump中找到)。我假设它是循环的第二个字符,我将用它们的新值更新变量:

    for 'e' in "The quick brown fox jumped over the lazy dog.":
        {'e': 1}['e'] = {'e': 1}.get('e', 0) + 1
    

    这里 得到 方法查找“e”的键条目并查找其值1。 我们把这个加到另一个上面 1个 在characters.get中(character,0)+ 结果得到2。

    当我们在字符[character]=characters.get(character,0)+1中应用此公式时:

    characters['e'] = 2
    

    很明显,最后一个方程为已经存在的“e”键指定了一个新的值2。 因此,词典现在是:

    characters = {'e': 2}
    
        3
  •  9
  •   kenorb    10 年前

    从这里开始 http://docs.python.org/tutorial/datastructures.html#dictionaries

    然后这里 http://docs.python.org/library/stdtypes.html#mapping-types-dict

    然后这里 http://docs.python.org/library/stdtypes.html#dict.get

    characters.get( key, default )
    
    key is a character
    
    default is 0
    

    如果字符在字典中, characters ,您将得到Dictionary对象。

    如果没有,则得到0。


    Syntax:

    get(key[, default])

    如果键在字典中,则返回键的值,否则为默认值。如果未给出默认值,则默认为 None ,以便此方法不会引发 KeyError .

        4
  •  6
  •   Ned Batchelder    15 年前

    如果D是字典,那么 d.get(k, v) 意思是,给我d中k的值,除非k不存在,在这种情况下,给我v。它被用于获取字符的当前计数,如果以前没有遇到字符,应该从0开始。

        5
  •  2
  •   user890167    11 年前

    我认为这是一个相当古老的问题,但这看起来像是在不了解语言特性的情况下写东西的时候。这个 collections 图书馆的存在是为了实现这些目的。

    from collections import Counter
    letter_counter = Counter()
    for letter in 'The quick brown fox jumps over the lazy dog':
        letter_counter[letter] += 1
    
    >>> letter_counter
    Counter({' ': 8, 'o': 4, 'e': 3, 'h': 2, 'r': 2, 'u': 2, 'T': 1, 'a': 1, 'c': 1, 'b': 1, 'd': 1, 'g': 1, 'f': 1, 'i': 1, 'k': 1, 'j': 1, 'm': 1, 'l': 1, 'n': 1, 'q': 1, 'p': 1, 's': 1, 't': 1, 'w': 1, 'v': 1, 'y': 1, 'x': 1, 'z': 1})
    

    显然,在这个例子中,空间是被计算的,但是是否需要这些过滤取决于您自己。

    至于 dict.get(a_key, default_value) 对于这个特定的问题,有几个答案——这个方法返回键的值,或者您提供的默认值。第一个参数是您要查找的键,第二个参数是该键不存在时的默认参数。