蟒蛇。如何修改/替换列表中作为字典值的元素?

时间:2020-05-13 06:22:33

标签: python

我有两个字典:

D_1 = {1: 'A', 2: 'B', 3: 'C', 4: 'D', 5: 'E', 6: 'F', 7: 'G', 8: 'H', 9: 'I', 10: 'J', 11: 'K', 12: 'L', 13: 'M', 14: 'N', 15: 'O', 16: 'P', 17: 'Q', 18: 'R', 19: 'S', 20: 'T', 21: 'U', 22: 'V', 23: 'W', 24: 'X', 25: 'Y', 26: 'Z'}

D_2 = {1: ['A', 'A', 'R', 'O', 'N'], 2: ['A', 'B', 'B', 'E', 'Y'], 3: ['A', 'B', 'B', 'I', 'E']}

我的任务是用D1中的相应键替换D2中的字母。例如,我希望D2中的第一个键和值对看起来像这样:{1:[1,1,19,16,15]} 我修改了D2,在其中将值放入列表中,而不是字符串,以为这会使我的任务更容易。

4 个答案:

答案 0 :(得分:2)

dd = {v:k for (k, v) in D_1.items()}
{x: [dd[a] for a in y] for (x, y) in D_2.items()}

第一行还原D_1。第二行将dd应用于D_2中的值。

答案 1 :(得分:2)

我认为您的D_1是多余的。您可以在这里使用ascii_uppercase

from string import ascii_uppercase

{k: [ascii_uppercase.index(i) + 1 for i in v] for k, v in D_2.items()}

输出:

{1: [1, 1, 18, 15, 14], 2: [1, 2, 2, 5, 25], 3: [1, 2, 2, 9, 5]}

答案 2 :(得分:0)

使用ord

D_2 = {1: ['A', 'A', 'R', 'O', 'N'], 2: ['A', 'B', 'B', 'E', 'Y'], 3: ['A', 'B', 'B', 'I', 'E']}

{k: [ord(val)-64 for val in v] for (k, v) in D_2.items()}

输出:

{1: [1, 1, 18, 15, 14], 2: [1, 2, 2, 5, 25], 3: [1, 2, 2, 9, 5]}

答案 3 :(得分:0)

m = map(lambda v:[{v: k for k, v in D_1.items()}[e] for e in v], D_2.values())
# for e in m:
#     print(e)
# [1, 1, 18, 15, 14]
# [1, 2, 2, 5, 25]
# [1, 2, 2, 9, 5]
# Or
# print(list(m))
# [[1, 1, 18, 15, 14], [1, 2, 2, 5, 25], [1, 2, 2, 9, 5]]

封装在地图中,并在有用时创建新字典:

m = list(m)
m = { i+1 : m[i] for i in range(0, len(m))}
print(m)
# {1: [1, 1, 18, 15, 14], 2: [1, 2, 2, 5, 25], 3: [1, 2, 2, 9, 5]}