代码之家  ›  专栏  ›  技术社区  ›  prosseek

用python反向映射字典[重复]

  •  17
  • prosseek  · 技术社区  · 14 年前

    可能重复:
    Inverse dictionary lookup - Python

    如果我有一本叫REF的字典

    ref = {}
    ref["abc"] = "def"
    

    我可以从“abc”得到“def”

    def mapper(from):
        return ref[from]
    

    但是,我怎样才能从“def”变成“abc”?

    def revmapper(to):
        ??????
    
    3 回复  |  直到 7 年前
        1
  •  22
  •   Stephen    14 年前

    如果经常这样做,您将希望构建一个反向字典:

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

    如果它很少见,而且你不在乎它是否低效,那么就这样做:

    >>> def revmapper(to):
    ...    for k,v in ref.iteritems():
    ...      if v == to: return k
    
        2
  •  5
  •   Ned Batchelder    14 年前

    你可以制作一本反向字典:

    revdict = dict((v,k) for k,v in ref.items())
    

    然后查找所需内容:

    assert revdict["def"] == "abc"
    

    注意,如果两个键映射到同一个值,这将不起作用。

        3
  •  2
  •   eruciform    14 年前
    dict(map( lambda a:[a[1],a[0]], d.iteritems() ))