python - 具有基于键的默认值的 Python dict
问题描述
我需要一个字典,该字典会自动填充每个缺少的访问键的默认值。我已经找到defaultdict
了一些其他方法来实现这一点,但我的问题是我希望每个键的默认值特定于键本身。
例如,defaultdict
我可以实现这样的目标:
from collections import defaultdict
d = defaultdict(lambda: 5)
> d[1] = 3
> d[1]
> 3
> d[2]
> 5
但是,如果我需要例如每个访问的缺失键的默认值key + 5
呢?就像是:
from collections import defaultdict
d = defaultdict(lambda key: key + 5) # <-- This does not work as defaultdict expects lambda function to be without any parameters
> d[1] = 3
> d[1]
> 3
> d[2]
> 7 <- Calculated from accessed key + 5 (2+5)
> d[5]
> 10 <- Calculated from accessed key + 5 (5+5)
是否有一种干净的内置方式来实现我的需要?我知道我可以创建 dict 的子类并在__getitem__
级别上实现这个特定的功能,但如果可能的话我想避免这种情况。
我在其他答案中找不到解决方案,如果它仍然是重复的,很抱歉。
解决方案
我认为没有内置的方法可以做到这一点。但是,您可以对自身进行子类化,而不是子类化dict
和 change ,以告诉使用参数 (the )调用,而不是不使用 args。它仍然是一个自定义类,而不是内置类,但它应该仍然非常有效。getitem
defaultdict
__missing__()
default_factory
key
from collections import defaultdict
class DefaultDict(defaultdict):
def __missing__(self, key):
return self.default_factory(key)
然后:
d = DefaultDict(lambda key: key + 5)
d[2]
# 7
推荐阅读
- javascript - 在 Angular 材质中将 mat-expansion-panel 的内容居中
- java - 获取连接的 WiFi SSID(Android API 级别 31)
- python - 如何计算 numpy 二维数组中的重复元素?
- python - 尝试使用 pywinauto 打开应用程序时遇到“您的应用程序中发生 Microsoft .NET 框架未处理的异常”错误
- html - 如何在柔性显示中居中图像?
- amazon-web-services - 即使在添加 ICMP 入站规则后也无法 PING EC2 实例
- python - 使用 sqlalchemy 从 Python 连接 MySQL,mysql+mysqldb 适用于 Windows+Ubuntu 但不适用于 RHEL
- php - sitemap_index.xml 正在重定向到 404 页面
- swift - Xcode 问题 AppDelegate 与 Firebase - 'NSPersistentCloudKitContainer'
- contiki-process - 如何在节点之间共享数据