我有一个列表
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循环来执行此操作,但是嵌套列表给我带来麻烦。
任何帮助将不胜感激。
答案 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]]