Создайте пары меток и вложенных списков

#python #list #nested

Вопрос:

Данный список списков выглядит следующим образом:

 total = [['ford', 'x', 'z', 'A', 'sedan', ['steering wheel problems', 'gearbox problems', 'broken engine']], ['fiat', 'y', 'x', 'C', 'kombi', ['steering wheel problems']], ...]
 

И список полей:

 labels = ['make', 'model', 'version', 'type', 'infos']
 

Мне нужно создать объект, подобный:

 x = [[['make': ford, 'model': 'x', 'version': 'x', 'type': 'z', 'infos': ['steering wheel problems']], ['make': fiat, 'model': 'x', 'version': 'x', 'type': 'z', 'infos': ['steering wheel problems', 'gearbox problems']], ...]
 

Как создать такую вещь?

Ответ №1:

dict() в качестве аргумента можно взять список из 2-х кортежей, и мы можем легко построить один из них с помощью zip() .

Если мы сможем добавить дополнительную метку для учета 'sedan' записи, код станет намного более кратким:

 labels = ['make', 'model', 'version', 'type', 'body', 'infos']
x = [
    dict(zip(labels, entry))
    for entry in total
]
# [
#  {'make': 'ford', 'model': 'x', 'version': 'z', 'type': 'A', 'body': 'sedan', 'infos': ['steering wheel problems', 'gearbox problems', 'broken engine']}, 
#  {'make': 'fiat', 'model': 'y', 'version': 'x', 'type': 'C', 'body': 'kombi', 'infos': ['steering wheel problems']}
# ]
 

В противном случае нам придется вручную «отредактировать» этот элемент из списка. Наиболее лаконичный способ, вероятно, заключается в следующем:

 labels = ['make', 'model', 'version', 'type', 'infos']
x = [
    dict(zip(labels, entry[:4]   entry[5:]))
    for entry in total
]
# [
#  {'make': 'ford', 'model': 'x', 'version': 'z', 'type': 'A', 'infos': ['steering wheel problems', 'gearbox problems', 'broken engine']}, 
#  {'make': 'fiat', 'model': 'y', 'version': 'x', 'type': 'C', 'infos': ['steering wheel problems']}
# ]
 

Ответ №2:

вы можете попробовать это

 total = [['ford', 'x', 'z', 'A', ['steering wheel problems', 'gearbox problems', 'broken engine']], ['fiat', 'y', 'x', 'C', ['steering wheel problems']]]
labels = ['make', 'model', 'version', 'type', 'infos']

new= [dict(zip(labels,x)) for x in total ]
print(new)
 

выход:

 [{'make': 'ford', 'model': 'x', 'version': 'z', 'type': 'A', 'infos': ['steering wheel problems', 'gearbox problems', 'broken engine']}, {'make': 'fiat', 'model': 'y', 'version': 'x', 'type': 'C', 'infos': ['steering wheel problems']}]