创建一个 defaultdict who's key 指的是与 key 相同的数值
Create a defaultdict who's key refers to the same numerical value as the key
我想创建一个defaultdict
谁的键自动引用一个整数或等值的浮点数
即行为将是:
In [1]: selfkey = defaultdict(something)
In [2]: selfkey[4]
Out[2]: 4
In [3]: selfkey[800]
Out[3]: 800
我不确定这是否可行,我也不确定这是否是同一个问题:
Is there a clever way to pass the key to defaultdict's default_factory?
^我不明白这个措辞是否与我正在寻找的内容相同。
我认为会有某种递归答案,但我没有运气尝试实现一个可以获取引用自身的值的 lambda 函数。
我得到的最接近的是引用字典本身的键,但是当你传递第二个值时它会自行扩展:
In [50]: t = defaultdict(lambda: t.keys())
In [51]: t[4]
Out[51]: dict_keys([4])
In [52]: t[5]
Out[52]: dict_keys([4, 5])
有什么想法吗?
使用 Is there a clever way to pass the key to defaultdict's default_factory? 中提出的解决方案。
from collections import defaultdict
class keydefaultdict(defaultdict):
def __missing__(self, key):
if self.default_factory is None:
raise KeyError( key )
else:
ret = self[key] = self.default_factory(key)
return ret
d = keydefaultdict(lambda key: key)
print(d[4])
print(d[5])
这输出
4
5
您可以创建自己的字典 class 并像这样修改 __getitem__
方法:
class mydict(dict):
def __getitem__(self, x):
if x not in self:
return x
else:
return super().__getitem__(x)
此 class 具有您想要的行为
>>> d = mydict()
>>> d[3]
3
>>> d[1.1]
1.1
>>> d[5] = -2
>>> d[5]
-2
编辑:如果你想要 defaultdict
将丢失的键添加到字典的行为,你可以这样做:
class mydict(dict):
def __getitem__(self, x):
if x not in self:
self[x] = x
return x
else:
return super().__getitem__(x)
我想创建一个defaultdict
谁的键自动引用一个整数或等值的浮点数
即行为将是:
In [1]: selfkey = defaultdict(something)
In [2]: selfkey[4]
Out[2]: 4
In [3]: selfkey[800]
Out[3]: 800
我不确定这是否可行,我也不确定这是否是同一个问题: Is there a clever way to pass the key to defaultdict's default_factory?
^我不明白这个措辞是否与我正在寻找的内容相同。
我认为会有某种递归答案,但我没有运气尝试实现一个可以获取引用自身的值的 lambda 函数。
我得到的最接近的是引用字典本身的键,但是当你传递第二个值时它会自行扩展:
In [50]: t = defaultdict(lambda: t.keys())
In [51]: t[4]
Out[51]: dict_keys([4])
In [52]: t[5]
Out[52]: dict_keys([4, 5])
有什么想法吗?
使用 Is there a clever way to pass the key to defaultdict's default_factory? 中提出的解决方案。
from collections import defaultdict
class keydefaultdict(defaultdict):
def __missing__(self, key):
if self.default_factory is None:
raise KeyError( key )
else:
ret = self[key] = self.default_factory(key)
return ret
d = keydefaultdict(lambda key: key)
print(d[4])
print(d[5])
这输出
4
5
您可以创建自己的字典 class 并像这样修改 __getitem__
方法:
class mydict(dict):
def __getitem__(self, x):
if x not in self:
return x
else:
return super().__getitem__(x)
此 class 具有您想要的行为
>>> d = mydict()
>>> d[3]
3
>>> d[1.1]
1.1
>>> d[5] = -2
>>> d[5]
-2
编辑:如果你想要 defaultdict
将丢失的键添加到字典的行为,你可以这样做:
class mydict(dict):
def __getitem__(self, x):
if x not in self:
self[x] = x
return x
else:
return super().__getitem__(x)