#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']}]