【问题标题】:Conditional key in dictionary - python [duplicate]字典中的条件键 - python [重复]
【发布时间】:2014-09-02 10:12:53
【问题描述】:

我有一个带有可选参数user_device=None 的函数create_group。如果为user_device 提供了非None 值,我希望字典targeting_spec 包含键值对"user_device": user_device,如果没有提供非None 值,我不希望targeting_spec 包含这个键值对。

我现在怎么做:

def create_group(..., user_device=None, ...):
    ...
    targeting_spec = {
        ...
    }
    if user_device:
        targeting_spec["user_device"] = user_device
    ...

这是一种公认​​的方式吗?如果不是,那是什么?我问是因为这似乎是 Python 喜欢优雅地解决的类型。

【问题讨论】:

  • 这不会将parameters[user_device] 设置为user_device,如果user_device 在非None 的布尔上下文中评估为False,例如空字符串@987654333 @,一个空列表或元组,等等。如果您不想要这种行为,请将您的支票更改为if user_device is not None
  • 这种做法似乎没有什么问题。尽管您可以将其作为None 输入parameters。只要您考虑到它是None,无论哪种方式都应该可以正常工作。
  • 哦,好点子。事实证明,如果它是我仍然不希望在 target_spec 中使用 user_device 的任何东西,所以我的陈述“如果提供了非无值......”在技术上并不准确,因为也不需要像“”或 [] 这样的东西由我,(如无)。我将编辑并修复我的变量名称以匹配描述。
  • 实际上我会选择非None,因此将检查更改为if user_device is not None:,但这是我之前没有考虑到的有效问题。
  • 如果你能做类似{'key1': value1, 'key2': value2 if value2, 'key3': value3}的事情就好了

标签: python dictionary nonetype


【解决方案1】:

你的方法很好,提供你不需要支持空值。

例如,考虑传入user_device=0user_device 不是 None,但它一个虚假值。

如果您需要支持与None 分开的虚假值,请使用is not None 进行测试:

if user_device is not None:
    parameters["user_device"] = user_device

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-05
    • 1970-01-01
    • 2018-03-27
    • 2013-09-21
    • 2023-03-10
    相关资源
    最近更新 更多