【问题标题】:Lock in keys of a defaultdict?锁定默认字典的键?
【发布时间】:2021-09-12 20:44:25
【问题描述】:

我想使用 defaultdict 来初始化字典。

d = collections.defaultdict(set)

for i in range(3):
  d[i].add(True)

这将产生一个字典,其中每个键都有 1..3 和 {True} 的值。 稍后我想像这样遍历这个集合的值:

for b in d[10]:
  print(b)

在标准字典中,这会抛出,因为10 不是字典的键。在默认字典中,这将使用空集初始化 10 而不会抛出。

有没有办法在不将所有键复制到新字典的情况下“锁定”默认字典的键? d = dict(d) 是 O(1) 操作吗?

【问题讨论】:

  • 这能回答你的问题吗? How to convert defaultdict to dict?
  • defaultdict 是dict 的子类,而不是普通dict 的包装器。如果后者是真的,您可以简单地提取对包装的dict 的引用并丢弃defaultdict。

标签: python


【解决方案1】:

这不是 O(1) 操作,因为 new 字典是通过 复制 默认字典中的现有键和值创建的。一个示范:

>>> d = collections.defaultdict(set)
>>> for i in range(3):
...    d[i].add(True)
...
>>> d2 = dict(d)
>>> d[10].add(9)  # Modify the default dict
>>> d
defaultdict(<class 'set'>, {0: {True}, 1: {True}, 2: {True}, 10: {9}})
>>> d2
{0: {True}, 1: {True}, 2: {True}}

如您所见,d 被修改,但不是在修改之前从d 创建的dict。

【讨论】:

    猜你喜欢
    • 2011-06-29
    • 1970-01-01
    • 2014-09-08
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 2017-09-06
    相关资源
    最近更新 更多