【发布时间】:2011-03-14 09:12:10
【问题描述】:
如果我有一个名为 ref 的字典,如下所示
ref = {}
ref["abc"] = "def"
我可以从“abc”得到“def”
def mapper(from):
return ref[from]
但是,我怎样才能从“def”到“abc”?
def revmapper(to):
??????
【问题讨论】:
标签: python dictionary
如果我有一个名为 ref 的字典,如下所示
ref = {}
ref["abc"] = "def"
我可以从“abc”得到“def”
def mapper(from):
return ref[from]
但是,我怎样才能从“def”到“abc”?
def revmapper(to):
??????
【问题讨论】:
标签: python dictionary
如果你经常这样做,你会想要建立一个反向字典:
>>> 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
【讨论】:
d = {'a':[1, 2, 3]}是不可能的
d = {'a':(1,2,3)} 一起使用,如果多个键具有相同的值,它将无法工作......使用低效的方法总是,不幸的是 - 效率低下。
你可以制作一个反向字典:
revdict = dict((v,k) for k,v in ref.items())
然后查找您想要的内容:
assert revdict["def"] == "abc"
请注意,如果两个键映射到相同的值,这将不起作用。
【讨论】:
.items 是 only method in Python3。速度更快,内存效率更高。
dict(map( lambda a:[a[1],a[0]], d.iteritems() ))
【讨论】: