【发布时间】:2012-03-08 22:17:27
【问题描述】:
正如 SO 上有关该主题的许多问题所证明的那样,从字典中提取切片是一项非常常见的任务,并且有一个相当不错的解决方案:
{k:v for k,v in dict.viewitems() if some_test(k,v)}
但这会创建一个具有自己映射的新字典。对于许多操作,最好只有原始字典的不可变视图(即它不支持视图上的分配或删除操作)。实现这样的类型可能很容易,但本地实用程序类的激增并不好。
那么,我的问题是:有没有一种内置的方法可以获取这样的“子集视图”?或者是否有第三方库(最好通过 PyPi 获得)可以很好地实现此类实用程序?
【问题讨论】:
-
我建议字典上的“不可变视图”正是您使用示例代码所获得的......因为没有制作字典的单独副本,我不确定你是怎么做的重新使“不可变”部分工作。
-
@larsks:它根本不支持赋值。
-
@larsks:我假设通过“不可变视图”,OP 意味着视图对象本身没有方法来改变字典(例如 pop),并且对包装的 dict 的任何更改都是立即可见的在视图中。当然,它在“深层”意义上不是不可变的——也就是说,如果你执行 my_view[some_key].append(12),那么对应于 12 的值当然会被修改。
标签: python dictionary facade