Skip to main content
 首页 » 编程设计

python之简化 if 条件 when .get return None

2025年05月04日15jackei

是否可以简化这个:

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') 

此外,除了在 if 语句中调用 get(),您还可以使用

if 'profile_id' not in kwargs: 

请注意,这些解决方案不会替换字典中显式的 None 值。

您可以为所有字段使用默认值字典,然后合并它们。

defaults = {"profile_id": "something1", "status": "something2", ...} 
kwargs = {**defaults, **kwargs} 

参见 How to merge two dictionaries in a single expression?