我有一本这样的字典:
dict1 = {'a':[1,2,3], 'b':[1,2,3,4], 'c':[1,2]}
想要这样的反例:
^{pr2}$比如这些问题:
Inverse Dict in Python\\ In-place dictionary inversion in Python
但我想用非唯一键来做,我不想就地转换。我有一些代码在工作,但我想知道是否有一种字典理解的方法来实现这一点。在
from collections import defaultdict
dict2 = defaultdict(list)
for i in dict1:
for j in dict1[i]:
dict2[j].append(i)
我试过了,但它只适用于唯一的映射。我的意思是“对于每个值,只有一个键列出值”。因此唯一映射:“1:[a],2:[b],3:[c]->;a:[1],b:[2],c:[3]“VS非唯一映射”1:[a],2:[a,b],3:[b,c]->;a:[1,2],b:[2,3],c:[3]”
dict2 = {j: i for i in dict1 for j in dict1[i]}
我想一定是这样的:
dict2 = {j: [i for i in dict1 if j in dict1[i]] for j in dict1[i]} # I know this doesn't work
除此之外,这样的理解似乎效率低下。有没有一种有效的、单一的方法来做到这一点?在
标准
dict
:^{} :
^{pr2}$作为一个单行线(感谢mhlesters的输入),但可读性如此之高(而且只因为dict2中的值是可变的,因此setdefault返回对它们的引用):
或者使用for循环:
^{pr2}$我根据Vroomfondel的回答得出了一个答案:
这不是最快的,但它是一个单一的班轮,它不是最慢的选择提出!在
^{pr2}$打印输出:
相关问题 更多 >
编程相关推荐