尝试使用 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?
我们的用例是,如果字典中不存在某个键,而我们正尝试根据该键获取值,则应返回仅包含该键的列表作为默认值。
下面是一个例子:
>>> 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?