将嵌套列表中的元素与字典中的值匹配

时间:2019-04-01 22:54:51

标签: python

我有一个列表

l = [['a', 's', 'l'], ['a', 'g', 'l'], ['a', 's', 'l'], ['g', 's', 'l'], ['a', 'l', 'g']]

我也有字典

d = [{'a': 1, 'v': 6, 'c': 7}, {'g': 3, 's': 4, 'l': 9}]

我需要创建另一个l形状的列表,但其值应与d匹配:

d = [[1, 4 ,9], [1, 3 , 9], [1, 4 , 9], [3, 4 , 9], [1, 9 , 3]]

我尝试使用for循环来执行此操作,但是嵌套列表给我带来麻烦。

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

简单的理解将起作用:

combined_mapping = {k: v for subdict in d for k, v in subdict.items()}
mapped = [[combined_mapping[element] for element in sublist] for sublist in l]
mapped

输出:

[[1, 4, 9], [1, 3, 9], [1, 4, 9], [3, 4, 9], [1, 9, 3]]

答案 1 :(得分:1)

您的d实际上是一列字典,因此您应该首先将字典列表合并为一个字典,然后使用列表推导将子列表中的项目映射到其字典值:< / p>

d = dict(i for s in d for i in s.items())
print([list(map(d.get, s)) for s in l])

所以给定:

l = [['a', 's' ,'l'], ['a', 'g' , 'l'], ['a', 's' , 'l'], ['g', 's' , 'l'], ['a', 'l' , 'g']]
d = [{'a': 1, 'v': 6, 'c': 7}, {'g': 3, 's': 4, 'l': 9}]

这将输出:

[[1, 4, 9], [1, 3, 9], [1, 4, 9], [3, 4, 9], [1, 9, 3]]

答案 2 :(得分:0)

我不明白为什么您的d变量实际上是字典列表。这是一本实际的字典,这将非常简单:

l = [['a', 's', 'l'], ['a', 'g', 'l'], ['a', 's', 'l'], ['g', 's', 'l'], ['a', 'l', 'g']]
d = {'a': 1, 'v': 6, 'c': 7, 'g': 3, 's': 4, 'l': 9}

r = [ [d[v] for v in lv] for lv in l ]
print(r) # [[1, 4, 9], [1, 3, 9], [1, 4, 9], [3, 4, 9], [1, 9, 3]]