繁体   English   中英

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

[英]Match elements in nested list with values from dictionary

我有一个清单

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循环来执行此操作,但嵌套列表给我带来了麻烦。

任何帮助,将不胜感激。

简单的理解将起作用:

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]]

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

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]]

我不明白为什么您的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]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM