问题是如何在迭代它们的同时将三个列表组合在一起。
list_a has a bunch of the same keys
list_b has values
list_c has values
*Do the list have to be in order and what if they aren't????
#list_a would be the key
list_a = ['MACHINE TOOLS', 'MACHINE TOOLS', 'FLUID', 'MACHINE TOOLS','MACHINE TOOLS', 'VALVES', 'FLUID', 'VALVES']
list_b = ['GROUP A MTOOLS', 'GROUP B MTOOLS', 'GROUP C MTOOLS', 'GROUP D MTOOLS', 'GROUP A FLUID', 'GROUP B FLUID', 'GROUP A VALVES', 'GROUP B VALVES']
list_c = ['1', '2', '3', '44', '46', '47', '52', '53']
{
'MACHINE TOOLS': { 'GROUP A MTOOLS': '1', 'GROUP B MTOOLS': '2', 'GROUP C MTOOLS': '3', 'GROUP D MTOOLS': '44'},
'FLUID': {'GROUP A FLUID': '46', 'GROUP B FLUID': '47'},
'VALVES': {'GROUP A VALVES': '52', 'GROUP B VALVES': '53'}
}
dic={ list_as:{ list_bs:[list_c] for list_bs in list_bs} for list_as in list_a}
^这接近我想要的但是由于某种原因,list_c的值没有被迭代 - 我尝试了一个for循环,但仍然没有运气。
答案 0 :(得分:3)
好的,由于第一个字典中的键不与第二个字典中的键对齐,看起来您首先必须在其中一些名称之间定义静态映射。这看起来像是:
name_mapping = {"MTOOLS": "MACHINE TOOLS",
"FLUID": "FLUID",
"VALVES": "VALVES"}
然后,创建输出字典的空白版本。
output = {key:{} for key in set(list_a)}
最后,使用其他两个列表中的值更新该dict:
for inner_key, val in zip(list_b, list_c):
for name, real_name in name_mapping.items():
if inner_key.endswith(name):
output[real_name][inner_key] = val
这导致你出现的列表:
{'FLUID': {'GROUP A FLUID': '46', 'GROUP B FLUID': '47'},
'MACHINE TOOLS': {'GROUP A MTOOLS': '1',
'GROUP B MTOOLS': '2',
'GROUP C MTOOLS': '3',
'GROUP D MTOOLS': '44'},
'VALVES': {'GROUP A VALVES': '52', 'GROUP B VALVES': '53'}}
如果列表中的值排成一行(例如'MACHINE TOOLS'
始终显示在list_a
中与'MTOOLS'
中以list_b
结尾的内容中的相同索引处,则此解决方案可以简化。