将元组项拆分为单独的变量

问题描述 投票:0回答:5

我的Python元组看起来像这样:

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

并且我想将其拆分,以便我可以独立地从元组中获取每个项目,以便能够执行以下操作:

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

或类似的。我的需要是将每件物品分开。我尝试在元组上使用 `.split(",") 但出现错误,表明元组没有分割选项。

python tuples iterable-unpacking
5个回答
53
投票

Python 可以自然地解包序列。

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

15
投票

最好不要使用

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


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

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

0
投票
try:
    tuple = ('sparkbrowser.com', 0, 'http://facebook.com/sparkbrowser', 'Facebook')
    keys = ('domain', 'level', 'url', 'text')
    for k in range(len(keys)):
        print(keys[k], '=', tuple[k])
© www.soinside.com 2019 - 2024. All rights reserved.