使用转换后的键的类似字典的类

mus*_*hil 5 python dictionary

我想要一个类似字典的类,它在查找时透明地使用转换后的键,以便我可以编写

k in d          # instead of f(k) in d
d[k]            # instead of d[f(k)]
d.get(k, v)     # instead of d.get(f(k), v)
Run Code Online (Sandbox Code Playgroud)

等等(例如,想象一下f进行某种规范化,例如f(k)返回k.lower()。)

似乎我可以继承dict并覆盖各个操作,但并不是有一个集中位置来进行所有键都经过的这种转换。这意味着我必须覆盖所有__contains____getitem__get和可能的__missing__等。这变得太乏味且容易出错,并且不是很有吸引力,除非这种开销超过手动替换f(k)普通 上的每个调用的开销dict

dim*_*414 1

我不知道为什么你的问题被否决,这是一个合理的愿望。在 Java 中,Guava 提供了几个地图转换实用程序,它们提供了您所描述的支持地图的视图。但是他们没有提供Maps.transformKeys()方法,因为它实际上不是一个非常有用的函数。有关原因的详细信息,请参阅如何使用 guava 将 Map<String, String> 转换为 Map<Long, String>为什么 Guava 不提供转换映射键的方法。

简而言之,在一般情况下不可能有效地提供关键转换。最好的做法可能只是创建一个应用键转换的新字典,而不是创建您所设想的复杂且可能不一致的数据结构,例如:

{ f(k): v for k, v in d.iteritems() }
Run Code Online (Sandbox Code Playgroud)

  • 有什么反馈吗,投反对票的人?我引用了另一种语言的(备受推崇的)库的示例,并建议在这里做同样的事情。这有什么问题吗? (2认同)