如何一行创建/更新Python字典键?能否用dict.setdefault()构建嵌套字典?
用一行代码创建/更新嵌套字典:
dict.setdefault()的正确打开方式 当然可以用dict.setdefault()来替代你现在的if-else代码,而且能让逻辑更紧凑,一行就搞定!
先搞懂setdefault()的核心逻辑
dict.setdefault(key, default)做了两件事:
- 如果
key已经在字典里,直接返回对应的值; - 如果
key不存在,就把key: default加入字典,然后返回这个default值。
刚好适配你嵌套字典的场景:我们可以先给外层字典的name键设置默认值(空字典),然后直接向内层字典添加/更新id: pin键值对。
替换你的if-else代码
原来的代码是这样的:
if name in my_dict: my_dict[name].update({ id : pin }) else: my_dict[name] = { id : pin }
用setdefault()可以简化成一行代码,两种写法任选:
写法1:直接赋值单个键值对(最简洁)
my_dict.setdefault(name, {})[id] = pin
解释:
- 先检查
name是否在my_dict里,不在就创建my_dict[name] = {}; - 返回
my_dict[name]对应的内层字典; - 直接给内层字典的
id键赋值pin,不管内层字典之前有没有这个键,都能完成创建/更新。
写法2:用update()批量添加(适合一次加多个键值对)
如果你需要一次性给同一个name添加多个id: pin,可以用update():
my_dict.setdefault(name, {}).update({id1: pin1, id2: pin2})
额外扩展:普通字典的创建/更新
如果是普通的非嵌套字典,要一行完成“键不存在就创建,存在就更新”,直接赋值就行:
my_dict[key] = value
但如果是要确保键存在时不覆盖,只在不存在时设置默认值,就用setdefault():
my_dict.setdefault(key, default_value)
内容的提问来源于stack exchange,提问作者crusarovid
相关产品推荐
相关产品推荐

