关于python:不是按键读取字典,而是按值读取(mydict[key]=value>>>mydict[value]=key)

Instead of read a dictionary by keys, read by values (mydict[key] = value >>> mydict[value] = key)

本问题已经有最佳答案,请猛点这里访问。

这个问题听起来有些奇怪,但通常情况下,您可以通过键获取值,例如:

1
2
3
4
5
6
7
>>> mydict = {'a':1,'b':2,'c':3}
>>> mydict['a']
1
>>> mydict['b']
2
>>> mydict['c']
3

但我需要这样做:

1
2
3
4
5
6
7
8
>>> mydict[1]
'a'
>>> mydict[2]
'b'
>>> mydict[3]
'c'
# In this case, my dictionary have to work like
>>> mydict = {1:'a',2:'b',3:'c'}

在我的程序中,我的字典可以通过两种方式打开,我的意思是:

1
2
3
4
5
6
7
>>> mydict = {'a':1,'b':2,'c':3}
# Sometimes I need the value of a letter:
>>> mydict['a']
1
# And somethimes, I need the letter of a value.
>>> mydict.REVERSAL[1]
a

我可以这样做:(我不知道这是否有效,我不测试它)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> mydict = {'a':1,'b':2,'c':3}
>>> mydict['a']
1
# etc...
>>> def reversal(z):
...     tmp = {}
...     for x,y in z.items():
...         tmp[y] = x
...     return tmp
>>> mydict = reversal(mydict)
>>> mydict[1]
a
# etc
>>> mydict = reversal(mydict)
>>> mydict['c']
3
# etc, etc, etc...

有简单的方法吗?< BR>首先:我知道chr()和ord(),我的代码不是关于字母的…这只是一个例子。< BR>第二:在我的字典里不会有两个相同的值,所以不会有重复键的问题…


你需要这样的东西,

1
2
3
In [21]: mydict = {'a':1,'b':2,'c':3}
In [22]: dict(zip(mydict.values(),mydict.keys()))
Out[22]: {1: 'a', 2: 'b', 3: 'c'}

1
2
In [23]: dict(i[::-1] for i in mydict.items())
Out[23]: {1: 'a', 2: 'b', 3: 'c'}

1
2
In [24]: dict(map(lambda x:x[::-1],mydict.items()))
Out[24]: {1: 'a', 2: 'b', 3: 'c'}


您可以使用一些字典理解来切换键和值:

1
2
3
4
>>> mydict = {'a': 1, 'b': 2, 'c': 3}
>>> reversal = {v: k for k, v in mydict.items()}
>>> reversal[1]
'a'


要反转字典,可以使用.items():

1
2
3
mydict = {'a':1,'b':2,'c':3}

new_dict = {b:a for a, b in mydict.items()}