将冒号分隔的列表项分割为元组列表

-2 投票
3 回答
2036 浏览
提问于 2025-04-30 11:26

如果我有以下这个列表:

['Host: www.perdu.com', 'Connection: keep-alive', 'Cache-Control: max-age=0', 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8', 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36', 'DNT: 1', 'Accept-Encoding: gzip,deflate,sdch', 'Accept-Language: en-US,en;q=0.8,es;q=0.6,fr;q=0.4', '']

我该如何把它变成一个包含元组的列表 tuple_list,像这样:

tuples_list = [
    ('Host', 'www.perdu.com'),
    ('Connection', 'keep-alive'),
     ....
]
暂无标签

3 个回答

1

你可以在列表推导式中使用 split(':') 来实现这个功能。

>>> tuples_list = [tuple(i.split(':')) for i in l]
>>> tuples_list
[('Host', ' www.perdu.com'),
 ('Connection', ' keep-alive'),
 ('Cache-Control', ' max-age=0'),
 ('Accept', ' text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8'),
 ('User-Agent', ' Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36'),
 ('DNT', ' 1'),
 ('Accept-Encoding', ' gzip,deflate,sdch'),
 ('Accept-Language', ' en-US,en;q=0.8,es;q=0.6,fr;q=0.4')]
4

这样做怎么样:

tuples_list = [tuple(item.split(": ")) for item in thelist]

这个方法使用了一种叫做列表推导式的技巧,它会遍历列表中的每一个项目,把每个项目按照:这个符号进行切分,然后把切分出来的结果转换成一个元组。

5

你听说过列表推导式吗?

headers = ['Host: www.perdu.com', 'Connection: keep-alive', 'Cache-Control: max-age=0', 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8', 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36', 'DNT: 1', 'Accept-Encoding: gzip,deflate,sdch', 'Accept-Language: en-US,en;q=0.8,es;q=0.6,fr;q=0.4', '']
headers = [i.split(': ') for i in headers]

这会给你返回:

[['Host', 'www.perdu.com'], ['Connection', 'keep-alive'], ['Cache-Control', 'max-age=0'], ['Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8'], ['User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36'], ['DNT', '1'], ['Accept-Encoding', 'gzip,deflate,sdch'], ['Accept-Language', 'en-US,en;q=0.8,es;q=0.6,fr;q=0.4'], ['']]

如果你这样做,你可以得到一个元组的列表:

headers = ['Host: www.perdu.com', 'Connection: keep-alive', 'Cache-Control: max-age=0', 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8', 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36', 'DNT: 1', 'Accept-Encoding: gzip,deflate,sdch', 'Accept-Language: en-US,en;q=0.8,es;q=0.6,fr;q=0.4', '']
headers = [tuple(i.split(': ')) for i in headers]

这样做会返回你所期望的结果:

[('Host', 'www.perdu.com'), ('Connection', 'keep-alive'), ('Cache-Control', 'max-age=0'), ('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8'), ('User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36'), ('DNT', '1'), ('Accept-Encoding', 'gzip,deflate,sdch'), ('Accept-Language', 'en-US,en;q=0.8,es;q=0.6,fr;q=0.4'), ('',)]

撰写回答