使用Python反向映射字典

pro*_*eek 17 python dictionary

可能重复:
反向字典查找 - Python

如果我有一个名为ref的字典如下

ref = {}
ref["abc"] = "def"
Run Code Online (Sandbox Code Playgroud)

我可以从"abc"获得"def"

def mapper(from):
    return ref[from]
Run Code Online (Sandbox Code Playgroud)

但是,我如何才能从"def"变为"abc"?

def revmapper(to):
    ??????
Run Code Online (Sandbox Code Playgroud)

Ste*_*hen 22

如果您经常这样做,您将需要构建反向字典:

>>> rev_ref = dict((v,k) for k,v in ref.iteritems())
>>> rev_ref
{'def': 'abc'}

>>> def revmapper(to):
...    return rev_ref[to]
Run Code Online (Sandbox Code Playgroud)

如果这种情况很少见,并且您不关心它是否效率低下,请执行以下操作:

>>> def revmapper(to):
...    for k,v in ref.iteritems():
...      if v == to: return k
Run Code Online (Sandbox Code Playgroud)

  • 为了清楚起见,这个dict`d = {'a':[1,2,3]}是不可能的. (2认同)
  • @razpeitia:对于反向字典,这是真的,但它可以用`d = {'a':( 1,2,3)}`,如果多个键具有相同的值,它将无效...遗憾的是,使用效率低下的方法总是效率低下. (2认同)

Ned*_*der 5

你可以制作一个反向词典:

revdict = dict((v,k) for k,v in ref.items())
Run Code Online (Sandbox Code Playgroud)

然后查找你想要的东西:

assert revdict["def"] == "abc"
Run Code Online (Sandbox Code Playgroud)

请注意,如果两个键映射到相同的值,则无效.