python - 当 .get 返回 None 时简化 if 条件
问题描述
是否可以简化这一点:
def method(self, **kwargs):
if kwargs.get('profile_id') is None:
kwargs['profile_id'] = 'something1'
if kwargs.get('status') is None:
kwargs['status'] = 'something2'
if kwargs.get('account_type') is None:
kwargs['account_type'] = 'something3'
if kwargs.get('external_account_id') is None:
kwargs['external_account_id'] = 'something4'
if kwargs.get('vendor') is None:
kwargs['vendor'] = 'something5'
if kwargs.get('created_timestamp') is None:
kwargs['created_timestamp'] = 'something6'
return ClassOne.objects.create(**kwargs)
这行得通,但我只是好奇是否有更优雅的东西。我正在考虑做这样的事情:
kwargs['profile_id'] = kwargs.get('profile_id') or 'something1'
解决方案
.get()
有一个可选的第二个参数,它是默认值。
kwargs['profile_id'] = kwargs.get('profile_id', 'something1')
此外,您可以使用而不是调用get()
您的if
语句
if 'profile_id' not in kwargs:
请注意,这些解决方案不会替换None
字典中的显式值。
您可以为所有字段使用默认字典,然后合并它们。
defaults = {"profile_id": "something1", "status": "something2", ...}
kwargs = {**defaults, **kwargs}
推荐阅读
- amazon-web-services - ALB/Lambda 和目标组的配置问题
- distributed-system - 当每次写入都不需要 fsync 时,raft 如何实现强一致性
- string - 如何从一行中删除某些单词,但将其余部分放入带有批处理的字符串/变量中?
- python - Matplotlib,为学术论文绘制灰色图
- c++ - 无法在 C++ 中删除动态对象
- discord.js - 收集结束时的消息
- docker - Docker Registry 存储未更新
- sql - 如何在表中找到没有反向顺序对的对?
- react-native - redux saga 的延迟功能不起作用
- javascript - 将日期字符串更改为季节