У меня есть список:

row = ["Title", "url", 33, "title2", "keyword"]

Есть ли более питонный способ распаковать эти значения, такие как:

title, url, price, title2, keyword = row[0], row[1], row[2], row[3], row[4]
29
Arti 16 Дек 2015 в 12:32

4 ответа

Лучший ответ

Что-то вроде этого ?

>>> row = ["Title", "url", 33, "title2", "keyword"]
>>> title, url, price, title2, keyword = row

Также обратите внимание, что ваш пример потерпит неудачу с IndexError (списки Python начинаются с нуля).

РЕДАКТИРОВАТЬ: вышеупомянутое примечание было написано до исправления примера OP ...

34
bruno desthuilliers 16 Дек 2015 в 10:16

Фактически, python автоматически распаковывает контейнеры, когда переменные разделяются запятыми. Это назначает каждый элемент в row переменным слева:

title, url, price, title2, keyword = row

После этого присваивания title имеет значение «Заголовок», price имеет значение 33 и т. Д.

7
ApproachingDarknessFish 16 Дек 2015 в 09:36

Также, если вам нужно всего несколько первых переменных, в Python 3 вы можете использовать:

row = ["Title", "url", 33, "title2", "keyword"]
title, url, *_ = row

Это хороший способ извлечь несколько первых значений без использования явных индексов.

6
Aleksandr Tukallo 31 Июл 2019 в 14:50

Вы также можете легко распаковать его в класс или namedtuple:

from collections import namedtuple

row = ["Title", "url", 33, "title2", "keyword"]

Entry = namedtuple("Entry", "title url price title2 keyword")
new_entry  = Entry(*row)
print(new_entry.title) # Title
0
Error - Syntactical Remorse 18 Июн 2019 в 15:30