2015-12-17 23 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

列表解析很棒,但同时使用多个列表解析使得很难为人类阅读和理解它。我会把它分成两部分并解决它。 –