2011-12-15 73 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']