在 Python 3.10 中,如何创建一个接受参数和 returns 字符计数字典的函数?
How do you create a function that takes an argument and returns a dictionary of character counts in Python 3.10?
我想创建一个接受参数并创建字典的函数,其中:
I) 键是参数的单个字符,并且
ii) 这些值表示该特定字符在参数中出现的次数。
有人向我展示了下面的示例,尽管它有效 - 第 4 行和第 5 行对我来说似乎不是本能的。
可能是因为我是编码新手。为什么代码需要检查空字典?有没有更直观的方法?
def count_letters(text):
result = {}
for letter in text:
if letter not in result:
result[letter] = 0
result[letter] += 1
return result
print(count_letters("Python"))
如果您不先检查 letter
是否在 result
中,那么
result[letter] += 1
会增加一个 KeyError
,因为还没有要增加的值。
这是 defaultdict
类型捕获的一种常见模式(如果它不存在则添加一个键,然后用它的值做一些事情)。
from collections import defaultdict
def count_letters(text):
result = defaultdict(int)
for letter in text:
# If letter isn't in result yet, implicitly execute
# result[letter] = int() first.
# int() returns 0.
result[letter] += 1
return result
计算可迭代值中的项目也是一种常见模式,因此也有一种类型可能不足为奇。
from collections import Counter
def count_letters(text):
# Counter is a subclass of dict,
# so you can do with it anything you
# would do with the dict.
return Counter(text)
我想创建一个接受参数并创建字典的函数,其中:
I) 键是参数的单个字符,并且
ii) 这些值表示该特定字符在参数中出现的次数。
有人向我展示了下面的示例,尽管它有效 - 第 4 行和第 5 行对我来说似乎不是本能的。
可能是因为我是编码新手。为什么代码需要检查空字典?有没有更直观的方法?
def count_letters(text):
result = {}
for letter in text:
if letter not in result:
result[letter] = 0
result[letter] += 1
return result
print(count_letters("Python"))
如果您不先检查 letter
是否在 result
中,那么
result[letter] += 1
会增加一个 KeyError
,因为还没有要增加的值。
这是 defaultdict
类型捕获的一种常见模式(如果它不存在则添加一个键,然后用它的值做一些事情)。
from collections import defaultdict
def count_letters(text):
result = defaultdict(int)
for letter in text:
# If letter isn't in result yet, implicitly execute
# result[letter] = int() first.
# int() returns 0.
result[letter] += 1
return result
计算可迭代值中的项目也是一种常见模式,因此也有一种类型可能不足为奇。
from collections import Counter
def count_letters(text):
# Counter is a subclass of dict,
# so you can do with it anything you
# would do with the dict.
return Counter(text)