![](/img/trans.png)
[英]Search for dictionary key, values that match in nested dictionary, wrapped in a list
[英]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.