我有几个类似于(city_name,city_code)的元组列表,由于实际原因我将其存储在字典中,因此我可以轻松地将city_name映射到city_code。 显然,城市名称和代码都是独一无二的。
很容易根据其名称检索城市代码,但有时我希望能够以另一种方式做到,比如从我在字典项目中进行线性搜索的代码中获取城市名称这很笨拙。
for c in cities.items():
if c[1] == code:
name = c[0]
break
有更好的方法吗?我正在使用python 2.7.8,我想保持这个简单,没有任何额外的模块。
答案 0 :(得分:0)
制作反向字典很容易。假设我们有一个字典d
:
In [9]: d
Out[9]: {'LA': 11, 'NO': 12, 'NYC': 10, 'SF': 13}
可以生成一个反转键和值的字典:
In [10]: reverse_d = dict((v, k) for k, v in d.items())
In [11]: reverse_d
Out[11]: {10: 'NYC', 11: 'LA', 12: 'NO', 13: 'SF'}
答案 1 :(得分:0)
你听起来像要制作双向词典:
class Bidict:
def __init__(self):
self.data = {}
self.reverse = {}
def __setitem__(self, k, v):
self.data[k] = v
self.reverse[v] = k
def __getitem__(self,k):
return self.data[k]
def getKey(self, v):
return self.reverse[v]
输出:
In [119]: bd = Bidict()
In [120]: bd[1] = 'a'
In [121]: bd
Out[121]: <__main__.Bidict at 0x10b0b8be0>
In [122]: bd.data
Out[122]: {1: 'a'}
In [123]: bd.reverse
Out[123]: {'a': 1}
In [124]: bd[1]
Out[124]: 'a'
In [125]: bd.getKey['a']
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-125-59e1828d8af1> in <module>()
----> 1 bd.getKey['a']
TypeError: 'method' object is not subscriptable
In [126]: bd.getKey('a')
Out[126]: 1