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()} |