2011-12-15 72 views
1

我只是想知道如果在Python的精彩世界有什么办法从东西是这样的:字典改变许多值很多键

dict1 = {'a': [1,2,3], 'b': [4,5,6]} 

dict2 = {'a':1, 'a':2, 'a':3,'b':4, 'b': 5, 'b': 6] 

或同等学历,顺序是无关紧要的,但我需要一些方法来将dict1分解成可以将数值分配给新列表的索引以及将键作为这些索引的实际值的方式,例如dict1会变成:

[0, a, a, a, b, b, b] 

任何帮助将不胜感激,虽然更白痴证明答案更好。

我再次感激你。

回答

5

您的dict2是没有意义的,因为字典键必须是唯一的。

我敢肯定,你可以得到你想要通过遍历dict1.items()什么,但我需要的预期输出列表看起来像......在你的榜样ab是不确定的,我不知道一些更多的澄清0在开始时代表的是什么。

也许你想要这样的事情?

dict2 = {} 
for k,v in dict1.items(): 
    for x in v: 
    dict2[x] = k 

这会给你一个dict2喜欢{1: 'a', 2: 'a', 3: 'a', 4: 'b', 5: 'b', 6: 'b'}。需要警告的是,在这个循环中可以覆盖dict1的解压缩值中的重复条目。


只是为了妈和笑声,在1号线相同的事,作为一个难以理解字典理解

{x: k for (k,v) in dict1.items() for x in v}

+0

这就是我所害怕的,你是否知道从字典1到列表中的e没有做中间步骤? – 2011-12-15 06:58:18

2

如果数值代表指数则:

import itertools 

dict1 = {'a': [1,2,3], 'b': [4,5,6]} 

L = [None]*(max(itertools.chain(*dict1.values())) + 1) 
for word, indexes in dict1.items():       
    for i in indexes:          
     L[i] = word 
print(L) 
# -> [None, 'a', 'a', 'a', 'b', 'b', 'b']