Python, разделить элементы кортежа на отдельные вещи

у меня есть Кортеж в Python, который выглядит так:

tuple = ('sparkbrowser.com', 0, 'http://facebook.com/sparkbrowser', 'Facebook')

и я хочу разделить его, чтобы я мог получить каждый элемент от tuple independent, чтобы я мог сделать что-то вроде этого:

domain = "sparkbrowser.com"
level = 0
url = "http://facebook.com/sparkbrowser"
text = "Facebook"

или что-то подобное этому, мне нужно, чтобы каждый элемент был разделен. Я пробовал с .split(",") на кортеж, но я получил ошибку, которая говорит, что кортеж не раскололи вариант

любая помощь или совет приветствуется

4 ответов


Python может распаковывать последовательности естественным образом.

domain, level, url, text = ('sparkbrowser.com', 0, 'http://facebook.com/sparkbrowser', 'Facebook')

лучше не использовать tuple в имя переменной.

можно использовать split(',') Если у вас была строка типа 'sparkbrowser.com,0,http://facebook.com/sparkbrowser,Facebook', что вам нужно преобразовать в список. Однако у вас уже есть кортеж, поэтому здесь нет необходимости.

если вы знаете точное количество компонентов, вы можете распаковать его непосредственно

the_tuple = ('sparkbrowser.com', 0, 'http://facebook.com/sparkbrowser', 'Facebook')
domain, level, url, text = the_tuple

Python3 имеет мощный синтаксис распаковки. Чтобы получить только domain и text вы могли бы использовать

domain, *rest, text = the_tuple

rest будет содержать [0, 'http://facebook.com/sparkbrowser']


>>> domain, level, url, text = ('sparkbrowser.com', 0, 'http://facebook.com/sparkbrowser', 'Facebook')
>>> domain
'sparkbrowser.com'
>>> level
0
>>> url
'http://facebook.com/sparkbrowser'
>>> text
'Facebook'

альтернативой для этого является использование collections.namedtuple. Это облегчает доступ к элементам кортежей.

демо:

>>> from collections import namedtuple
>>> Website = namedtuple('Website', 'domain level url text')
>>> site1 = Website('sparkbrowser.com', 0, 'http://facebook.com/sparkbrowser', 'Facebook')
>>> site2 = Website('foo.com', 4, 'http://bar.com/sparkbrowser', 'Bar')
>>> site1
Website(domain='sparkbrowser.com', level=0, url='http://facebook.com/sparkbrowser', text='Facebook')
>>> site2
Website(domain='foo.com', level=4, url='http://bar.com/sparkbrowser', text='Bar')
>>> site1.domain
'sparkbrowser.com'
>>> site1.url
'http://facebook.com/sparkbrowser'
>>> site2.level
4