2015-12-17 30 views
3

我有一個values的列表,它與我之前創建的字典中的某些keys匹配。使用字典鍵轉換列表中的元素

myDict = {1:'A',2:'B',3:'C'} 
myList = ['A','A','A','B','B','A','C','C'] 

如何創建/轉換myList成類似:

myNewList = [1,1,1,2,2,1,3,3] 

有人能指出我在正確的方向?

不知道它是否重要,我在另一個腳本中使用json創建了字典,現在我正在將當前創建的字典加載到當前腳本中。

+3

你是如何保證'myDict'的值是唯一的?如果你還沒有,你打算怎麼處理像'{1:'A',2:'B',3:'A'}'這樣的詞典?你會用'1'還是'3'替換'myList'中的每個'A'...或者引發某種錯誤? –

+1

在我的情況下,這些值是唯一的。不知道我是否會很快遇到你的場景,但現在我可以按照我想要的方式編譯該代碼,這非常棒!感謝您檢查,但! :) –

回答

8

一個簡單的方法是隻顛倒myDict,然後用它來繪製新的列表:

myNewDict = {v: k for k, v in myDict.iteritems()} 
myNewList = [myNewDict[x] for x in myList] 

也看看這個Python的命名約定:What is the naming convention in Python for variable and function names?

+1

如果'myDict'包含重複的值,這將導致一個大多不可預知的'myNewDict'和'MyNewList'。 O.P.尚未解決這一問題......但我們知道,唯一的價值已經得到保證。 –

+1

@ KevinJ.Chase老實說,我認爲OP可能會讓他的鍵和值翻轉。但我認爲這個簡潔的答案適用於這種情況,除非提供更多細節。 – CookieOfFortune

0

這工作太:

myNewList = [] 
for val in myList: 
    for key, value in myDict.iteritems(): 
     if val == value: 
     myNewList.append(key) 
+1

如果'myDict'包含重複的值,則會以基本不可預知的順序將_all_匹配鍵附加到'myNewList'。 –

+1

在if子句中添加中斷以避免重複: 'myNewList = []' 'for val in myList:' 'for key,value in myDict.iteritems():' 'if val == value:'' 'myNewList.append(key)' 'break' ' – user61026

1
myDict = {1:'A',2:'B',3:'C'} 

myList = ['A','A','A','B','B','A','C','C'] 

value = [key for i in myList for key, value in myDict.iteritems() if i == value] 

print value 

我建議你讀了一點關於COMPR ession list http://docs.python.org.ar/tutorial/3/datastructures.html

+2

你的意思是[list comprehensions](https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions)? –

+1

是的,對不起,我正在學習英語 –

+2

列表解析很棒,但同時使用多個列表解析使得很難爲人類閱讀和理解它。我會把它分成兩部分並解決它。 –