Skip to main content
 首页 » 编程设计

python之按值获取字典的键

2025年05月04日10zhwl

<分区>

Possible Duplicate:
Efficient bidirectional hash table in Python?

我正在研究一个 AST 解析器,它解析 python 代码。首先,我通过调用 compile 将 python 代码转换为 AST。
这样做时,我需要确保我不会编译同一个导入模块两次,即使有两次调用导入它也是如此。

目前,我可以检测到这两个调用是等价的:

import modname as mod 
import modname as mod 

我维护一个字典,将(在本例中)mod 映射到 modname。我不仅用它来检测 modname 是否已经被导入,而且还用于其他一些簿记功能。

现在,我无法检测到以下三个调用导入了相同的模块:

import modname as mod 
import modname as foo 
import modname 

我知道我可以通过使用 set 包含 modname 并在编译 modname 第二个之前检查这个集合来轻松绕过这个问题时间。然而,这需要另一 block 线性空间。
我可以对字典进行线性传递以检查是否有任何键映射到 modname 的值,但这违背了使用字典的目的。

因此我的问题是:是否存在一种“双向 dict”的数据结构 - 一种将其键映射到值并且其值可以在 O(1) 时间内查找的数据结构好吗?