dict.get
的逻辑是:
if key in a_dict:
value = a_dict[key]
else:
value = default_value
举个例子:
In [72]: a_dict = {'mapping':['dict', 'OrderedDict'], 'array':['list', 'tuple']}
In [73]: a_dict.get('string', ['str', 'bytes'])
Out[73]: ['str', 'bytes']
In [74]: a_dict.get('array', ['str', 'byets'])
Out[74]: ['list', 'tuple']
setdefault
的机制是:
levels = ['master', 'manager', 'salesman', 'accountant', 'assistant']
group_by_leading_letter = {}
for level in levels:
leading_letter = level[0]
if leading_letter not in group_by_leading_letter:
group_by_leading_letter[leading_letter] = [level]
else:
group_by_leading_letter[leading_letter].append(word)
In [80]: group_by_leading_letter
Out[80]: {'a': ['accountant', 'assistant'], 'm': ['master', 'manager'], 's': ['salesman']}
setdefault字典方法就是为了达到这个目的。前面的for循环可以重写为:
In [87]: for level in levels:
...: leading = level[0]
...: group_by_leading_letter.setdefault(leading,[]).append(level)
Out[80]: {'a': ['accountant', 'assistant'], 'm': ['master', 'manager'], 's': ['salesman']}
这很简单,意味着非空列表追加一个元素或空列表追加一个元素。
defaultdict
使这甚至更容易。要创建一个 defaultdict
,只需为字典中每个槽位传递一种类型或函数来生成默认值:
from collections import defualtdict
group_by_leading_letter = defaultdict(list)
for level in levels:
group_by_leading_letter[level[0]].append(level)
setdefault()
是一个表达式。我对您的问题和评论感到困惑。请明确指出您所讨论的内容。 - S.Lott