【问题标题】:Python dictionary where values are optional值是可选的 Python 字典
【发布时间】:2019-12-09 13:56:40
【问题描述】:

我正在寻找介于集合和字典之间的东西。一组唯一键,其中一些键有值,但不是全部。

我可以使用值 None 表示没有值的字典,但是当大多数键没有值时,它会变得冗长:{1: 'one', 2: None, 3: None}。我希望它只是 {1: 'one', 2, 3},但这是语法错误。

在 Python 中有这样的东西吗? defaultdict 在这里没有帮助。当你从字典中读取时,这会产生默认值,而不是在添加键时。

如果你想要一个动机,我正在尝试将一组 C #defines 存储为没有值的 -DSOMETHING-DSOMETHING=FOO 传递给编译器。

【问题讨论】:

  • 在我看来你将不得不选择{1: 'one', 2: None, 3: None}
  • 将您的#defines 视为标志{'SOMETHING': True, 'SOMETHINGELSE': 'FOO'}...

标签: python dictionary set


【解决方案1】:

为什么你需要字典中的键?你可以像这样实现字典:

d = {1: 'one', 2: 'present'}

然后当您使用字典时,您可以这样做:

one = d.get(1, None) # 'one'
two = d.get(2, None) # 'two'
three = d.get(3, None) # None

也许我可以添加,您可以在一组中拥有完整的键列表:

keys = set([1,2,3])

并在查找中使用它:

for key in keys:
    value = d.get(key, None)
    if value is not None:
        ...
    else:
        ...

这是另一种选择。使用元组:

data = [(1, 'one'), (2, 'present'), (3,)]

for item in data:
    key = item[0]
    if len(item)>1:
         value = item[1]
    else:
         value = None

【讨论】:

  • 我主要想要一种简洁的方式来初始化 Python 代码中的数据结构。最后的 tuple 方法挺好看的。
  • 当你说使用 Nones 很冗长时,我担心你是手动硬编码整个事情。不能生成吗?如果是配置文件,可能存储为json并加载。
猜你喜欢
  • 2023-02-16
  • 1970-01-01
  • 2017-05-11
  • 1970-01-01
  • 2018-12-08
  • 1970-01-01
  • 2014-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多