尝试使用 defaultdict 在 Python 中获取只有键值作为默认值的列表

Trying to get a list with only key value as the defaultvalue in Python using defaultdict

我们的用例是,如果字典中不存在某个键,而我们正尝试根据该键获取值,则应返回仅包含该键的列表作为默认值。

下面是一个例子:

>>> dic = defaultdict(<function 'custom_default_function'>, {1: [1,2,6], 3: [3,6,8]})
>>> print(dic[1])
[1,2,6]
>>> print(dic[5])
[5]

如果密钥的值为 1,则输出完全没问题,因为密钥在 dic 中。但是对于我们尝试查找键 5 的情况,代码必须打印的默认值应该是 [5] 即只有键作为其中元素的列表。

我尝试编写一个默认函数,但不知道如何将参数传递给默认函数。

def default_function(key):
    return key
      
# Defining the dict
d = defaultdict(default_function)
d[1] = [1,4]
d[2] = [2,3]
print(d[4]) # This will throw error as the positional argument for default_function is not missing

我哪里出错了,如何使用 Python 中的 defaultdict 解决这个问题?

defaultdict 不会生成依赖于键的新值...

您可以继承 dict 并重载 __missing__:

class MyDict(dict):

    def __init__(self):
        super().__init__()

    def __missing__(self, key):
        self[key] = [key]
        return self[key]

my_dict = MyDict()

print(my_dict[5])  # -> [5]
print(my_dict)     # -> {5: [5]}

这里还有 2 个可能有帮助的答案:

  • Accessing key in factory of defaultdict
  • Is there a clever way to pass the key to defaultdict's default_factory?