Python - 将字典应用于列表,同时保留其他元素

时间:2017-10-16 04:26:28

标签: python dictionary

我有一个列表,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, '/', '*']

任何帮助都将不胜感激。

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, '/', '*']