Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-使用具有唯一值的字典_Python_Python 2.7 - Fatal编程技术网

Python-使用具有唯一值的字典

Python-使用具有唯一值的字典,python,python-2.7,Python,Python 2.7,我有几个元组列表,类似于(city\u name,city\u code),出于实际原因,我将它们存储在字典中,这样我就可以轻松地将city\u name映射到city\u code。 显然,城市名称和代码都是唯一的 根据城市名称检索城市代码很容易,但有时我希望能够用另一种方法,比如从代码中获取城市名称,然后在字典项中进行线性搜索,这相当笨拙 for c in cities.items(): if c[1] == code: name = c

我有几个元组列表,类似于(city\u name,city\u code),出于实际原因,我将它们存储在字典中,这样我就可以轻松地将city\u name映射到city\u code。 显然,城市名称和代码都是唯一的

根据城市名称检索城市代码很容易,但有时我希望能够用另一种方法,比如从代码中获取城市名称,然后在字典项中进行线性搜索,这相当笨拙

for c in cities.items():
           if c[1] == code:
                name = c[0]
                break

有更好的方法吗?我使用的是Python2.7.8,我希望在没有任何附加模块的情况下保持简单。

制作反向词典非常简单。假设我们有一本字典
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'}

您听起来像是想制作一本双向词典:

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
[119]中的
:bd=Bidict()
In[120]:bd[1]=“a”
In[121]:bd
出[121]:
In[122]:bd.data
Out[122]:{1:'a'}
In[123]:bd.reverse
Out[123]:{'a':1}
In[124]:bd[1]
Out[124]:“a”
在[125]中:bd.getKey['a']
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在()
---->1 bd.getKey['a']
TypeError:“方法”对象不可下标
在[126]中:bd.getKey('a')
Out[126]:1

如果经常进行反向查找,最好保留一个反向字典。如果反向查找不是时间关键型的,则扫描可以。@John1024:感谢您捕获错误。我使用了错误的dup目标(我有一大堆问题要问,显然复制了错误的URL)。现在修好它。谢谢你的报告