使用字典键转换列表中的元素

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'} 这样的字典时,你打算如何处理?你会将 myList 中每个 'A' 替换为 13,还是会引发某种错误? - Kevin J. Chase
1
在我的情况下,这些值是唯一的。不确定我是否会很快遇到你的情况,但现在我可以让这段代码按照我想要的方式编译,这太棒了!谢谢你的关注! :) - Mike Issa
3个回答

8

一种简单的方法是只需反转myDict,然后使用它来映射新列表:

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

此外,您还可以查看Python命名约定:Python变量和函数名称的命名约定是什么?


1
如果 myDict 包含重复的值,这将导致基本不可预测的 myNewDictMyNewList。目前 O.P. 还没有解决这种情况... 我们并不知道是否已经保证了唯一值。 - Kevin J. Chase
1
@KevinJ.Chase 老实说,我认为 OP 可能把键和值弄反了。但是,除非提供更多细节,否则我认为简洁的答案对这种情况有效。 - CookieOfFortune

1

2
你是指 列表推导式 吗? - Kevin J. Chase
2
列表推导式很棒,但是将多个列表推导式一起使用会使人难以阅读和解释。我会将其分成两部分来解决。 - rajesh.kanakabandi

0

这也可以运行:

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

1
如果 myDict 包含重复的值,这将按照大多数不可预测的顺序将所有匹配的键添加到 myNewList - Kevin J. Chase
1
在if语句中添加break以避免重复: myNewList = [] for val in myList: for key, value in myDict.iteritems(): if val == value: myNewList.append(key) break - user61026

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接