python 字典get()方法和setdefault()方法

get()方法

在访问一个键的值之前,检查该键是否存在于字典中,这很麻烦。好在,字典有一个get()方法,它有两个参数:要取得其值的键,以及如果该键不存在时,返回的备用值。在交互式环境中输入以下代码:

>>> picnicItems = {'apples': 5, 'cups': 2}
>>> 'I am bringing ' + str(picnicItems.get('cups', 0)) + ' cups.'
'I am bringing 2 cups.'
>>> 'I am bringing ' + str(picnicItems.get('eggs', 0)) + ' eggs.'
'I am bringing 0 eggs.'

因为 picnicItems 字典中没有'egg'键,get()方法返回的默认值是 0。不使用 get(),代码就会产生一个错误消息,就像下面的例子:

>>> picnicItems = {'apples': 5, 'cups': 2}
>>> 'I am bringing ' + str(picnicItems['eggs']) + ' eggs.'
Traceback (most recent call last):
    File "<pyshell#34>", line 1, in <module>
        'I am bringing ' + str(picnicItems['eggs']) + ' eggs.'
KeyError: 'eggs'

setdefault()方法

你常常需要为字典中某个键设置一个默认值,当该键没有任何值时使用它。代码看起来像这样:

spam = {'name': 'Pooka', 'age': 5}
if 'color' not in spam:
    spam['color'] = 'black'

setdefault()方法提供了一种方式,在一行中完成这件事。传递给该方法的第一个参数,是要检查的键。第二个参数,是如果该键不存在时要设置的值。如果该键确实存在,方法就会返回键的值。在交互式环境中输入以下代码:

>>> spam = {'name': 'Pooka', 'age': 5}
>>> spam.setdefault('color', 'black')
'black'
>>> spam
{'color': 'black', 'age': 5, 'name': 'Pooka'}
>>> spam.setdefault('color', 'white')
'black'
>>> spam
{'color': 'black', 'age': 5, 'name': 'Pooka'}

第一次调用 setdefault()时,spam 变量中的字典变为{'color': 'black', 'age': 5, 'name':'Pooka'}。该方法返回值'black',因为现在该值被赋给键'color'。当spam.setdefault('color','white')接下来被调用时,该键的值“没有”被改变成'white',因为 spam 变量已经有
名为'color'的键。setdefault()方法是一个很好的快捷方式,可以确保一个键存在。下面有一个小程序,计算一个字符串中每个字符出现的次数。打开一个文件编辑器窗口,输入以下代码,保存为 characterCount.py:

message = 'It was a bright cold day in April, and the clocks were striking thirteen.'
count = {}
for character in message:
	count.setdefault(character, 0)
	count[character] = count[character] + 1

print(count)

程序循环迭代message 字符串中的每个字符,计算每个字符出现的次数。setdefault()方法调用确保了键存在于 count 字典中(默认值是 0),这样在执行 count[character] = count[character] + 1 时,就不会抛出KeyError 错误。程序运行时,输出如下:

{' ': 13, ',': 1, '.': 1, 'A': 1, 'I': 1, 'a': 4, 'c': 3, 'b': 1, 'e': 5, 'd': 3, 'g': 2, 'i': 6, 'h': 3, 'k': 2, 'l': 3, 'o': 2, 'n': 4, 'p': 1, 's': 3, 'r': 5, 't': 6, 'w': 2, 'y': 1}

从输出可以看到,小写字母 c 出现了 3 次,空格字符出现了 13 次,大写字母 A出现了 1 次。无论 message 变量中包含什么样的字符串,这个程序都能工作,即使该字符串有上百万的字符!

猜你喜欢

转载自blog.csdn.net/dongyu1703/article/details/81589790
今日推荐