Python中的逆字典
我想用一个已有字典里的值来创建一个新的字典,把这些值当成单独的键。
举个例子:
dict1 = dict({'a':[1,2,3], 'b':[1,2,3,4], 'c':[1,2]})
我希望得到:
dict2 = dict({1:['a','b','c'], 2:['a','b','c'], 3:['a','b'], 4:['b']})
到目前为止,我还没找到一个很简单的方法来做到这一点。有没有什么建议?
3 个回答
-3
另一种方法:
dict2={}
[[ (dict2.setdefault(i,[]) or 1) and (dict2[i].append(x)) for i in y ] for (x,y) in dict1.items()]
4
注意,你在例子中并不需要写出 dict
:使用 {}
这种写法就可以得到一个字典(dict)了。
dict1 = {'a':[1,2,3], 'b':[1,2,3,4], 'c':[1,2]}
8
如果你使用的是Python 2.5或更高版本,可以使用defaultdict
类,它在collections
模块里。这个defaultdict
会在你第一次访问一个不存在的键时自动创建对应的值,所以你可以用它来为dict2
创建列表,像这样:
from collections import defaultdict
dict1 = dict({'a':[1,2,3], 'b':[1,2,3,4], 'c':[1,2]})
dict2 = defaultdict(list)
for key, values in dict1.items():
for value in values:
# The list for dict2[value] is created automatically
dict2[value].append(key)
需要注意的是,dict2
里的列表不会有特定的顺序,因为字典里的键值对是没有顺序的。
如果你想要最后得到一个普通的字典,并且在访问不存在的键时会抛出KeyError
错误,只需在上面的代码之后加上dict2 = dict(dict2)
就可以了。