21

我在 Python 中有如下所示的元组:

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

我想把它分开,这样我就可以从独立的元组中获取每个项目,这样我就可以做这样的事情:

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

或类似的东西,我需要将每个项目分开。我在元组上试过,.split(",")但我得到了错误,说元组没有拆分选项。

4

4 回答 4

47

Python 可以自然地解包序列。

domain, level, url, text = ('sparkbrowser.com', 0, 'http://facebook.com/sparkbrowser', 'Facebook')
于 2013-08-22T06:18:15.320 回答
14

最好不要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 具有强大的解包语法。为了得到domaintext可以使用的

domain, *rest, text = the_tuple

rest将包含[0, 'http://facebook.com/sparkbrowser']

于 2013-08-22T06:24:18.360 回答
4
>>> domain, level, url, text = ('sparkbrowser.com', 0, 'http://facebook.com/sparkbrowser', 'Facebook')
>>> domain
'sparkbrowser.com'
>>> level
0
>>> url
'http://facebook.com/sparkbrowser'
>>> text
'Facebook'
于 2013-08-22T06:22:58.803 回答
1

另一种方法是使用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
于 2018-05-09T18:03:24.413 回答