我有一个列表,a,定义如下:
a = ['3', 'A', '+', 'Q', '2', '/', '*']
我有一本字典,d,定义如下:
d = {'A': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6' : 6, '7': 7, '8': 8, '9': 9, '0': 10, 'J': 11, 'Q': 12, 'K': 13}
我想将字典应用于字典中列表的元素,包括3,A,Q和2,同时将操作保留在相同的位置和相同的字符串格式中。我试图使用列表理解,但也试图将其应用于操作。
我想要的输出如下:
a = [3, 1, '+', 12, 2, '/', '*']
任何帮助都将不胜感激。
答案 0 :(得分:3)
如果字典中没有该键,您可以使用dict.get
指定默认值:
a = ['3', 'A', '+', 'Q', '2', '/', '*']
d = {'A': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6' : 6, '7': 7, '8': 8, '9': 9, '0': 10, 'J': 11, 'Q': 12, 'K': 13}
[d.get(c, c) for c in a] # produces [3, 1, '+', 12, 2, '/', '*']
这表示,对于c
中的每个字符a
,在d
中查找该字符的值,或者如果该字符不存在则返回c
。< / p>
答案 1 :(得分:0)
以下程序将在保留映射中存在的任何运算符的同时进行替换。但是,您需要在另一个列表中指定所有可能的运算符,
a = ['3', 'A', '+', 'Q', '2', '/', '*']
ops = ['+','/','*','-'] # contains all operators
d = {'A': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6' : 6, '7': 7, '8': 8, '9': 9, '0': 10, 'J': 11, 'Q': 12, 'K': 13}
result = [c if c in ops else d.get(c, c) for c in a]
print(result)
输出是,
[3, 1, '+', 12, 2, '/', '*']
如果字典包含“+”的映射,
,该怎么办?a = ['3', 'A', '+', 'Q', '2', '/', '*']
ops = ['+','/','*','-'] # contains all operators
d = {'+':2,'A': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6' : 6, '7': 7, '8': 8, '9': 9, '0': 10, 'J': 11, 'Q': 12, 'K': 13}
result = [c if c in ops else d.get(c, c) for c in a]
print(result)
输出仍然相同,
[3, 1, '+', 12, 2, '/', '*']