Python动态创建嵌套字典的更Pythonic实现方式求教
优化实现方案
注意不要使用dict作为变量名,这会覆盖Python内置的字典类型,导致后续调用内置字典方法时报错
以下是几种符合Pythonic规范的实现方式,按适用场景区分:
- 无需导入依赖,使用内置
setdefault方法
适用于不想额外导入标准库,且后续需要给内层字典新增其他字段的场景:
person_dict = {} persons = ('jack', 'jill', 'fido', 'spot') for person in persons: person_dict.setdefault(person, {'count': 0})['count'] += 1
setdefault会自动判断键是否存在,不存在则写入默认的{'count':0},存在则直接返回对应的值,一行即可完成原代码的条件判断逻辑。
- 使用
collections.defaultdict处理嵌套结构
适用于嵌套层级更深、动态生成结构更复杂的场景:
from collections import defaultdict person_dict = defaultdict(dict) persons = ('jack', 'jill', 'fido', 'spot') for person in persons: person_dict[person]['count'] = person_dict[person].get('count', 0) + 1
defaultdict会在访问不存在的外层键时,自动生成你指定类型的默认值(这里是dict),无需手动判断键是否存在。
- 仅统计计数场景,使用
Counter+字典推导式
如果你的需求只是统计每个元素的出现次数,再封装为嵌套字典结构,用这种方案代码量最少:
from collections import Counter persons = ('jack', 'jill', 'fido', 'spot') person_dict = {person: {'count': cnt} for person, cnt in Counter(persons).items()}
内容的提问来源于stack exchange,提问作者Charles Consumé
相关产品推荐
相关产品推荐

