将值添加到列表并转换为元组列表

时间:2015-01-12 13:21:06

标签: python list tuples

我正在阅读一些日志文件,并有一个这样的网址列表:

url看起来像每个网址后的新行

http://domain1.com
http://domain2.com
http://domain3.com
http://domain4.com

我现在想要创建一个元组并为每个网址添加一个值。所有数值都相同。 它看起来应该是这样的。

('http://domain1.com', 3)
('http://domain2.com', 3)
('http://domain3.com', 3)
('http://domain4.com', 3)

最后,为了进一步处理,我需要一个看起来像这样的元组列表:

[('http://domain1.com', 3), ('http://domain2.com', 3), ('http://domain3.com',3)...]

这是我自己尝试的:

#split urls with comma
separated_urls = url.split(', ')
num__of_lines = sum(1 for line in separated_urls)

#make a list of 3s for the length of the url list
list_of_threes = [3] * num__of_lines

combined_list = zip(separated_urls, list_of_threes)
final_list = tuple(combined_list)
print final_list

这给了我以下输出:

(('http://domain1.com', 3),)
(('http://domain2.com', 3),)
(('http://domain3.com', 3),)
(('http://domain4.com', 3),)

有人可以给我一点帮助,以获得所需的输出吗?

由于

4 个答案:

答案 0 :(得分:1)

使用列表理解

#split urls with comma
separated_urls = url.split('\n')
final_list = [(url,3) for url in separated_urls]

编辑:使用split('\n')或(split()作为默认换行符)将网址列表拆分而不是split(', ')

答案 1 :(得分:1)

你可以轻松地以两种方式做到这一点。

1)老派循环方式:

output_list = []
for url in url.split():
    output_list.append((url, 3))

2)或者列表理解方式,正如@Trengot所说:

output_list = [(url, 3) for url in url.split()]

如果您希望对列表进行任何更改并在创建output_list之前检查更多内容,那么旧学校方式更适合。对于简单的情况(即使进行条件检查),列表推导也是可行的方法: - )

编辑:阅读你的评论,我想你需要通过“\ n”字符而不是逗号分隔它们。相应地更新了代码,因为默认情况下拆分用“\ n”分割字符。

答案 2 :(得分:0)

代码语句final_list = tuple(combined_list)中的

正在将list转换为tuple

因此,如果您希望输出为list,列表项为tuple,那么您可以删除上述语句。

通过代码中的print combined_list语句进行检查。


使用List Comprehensions

>>> urls = """
... http://domain1.com
... http://domain2.com
... http://domain3.com
... http://domain4.com"""

>>> print [(i, 3) for i in urls.split('\n') if i.strip()]
[('http://domain1.com', 3), ('http://domain2.com', 3), ('http://domain3.com', 3), ('http://domain4.com', 3)]

答案 3 :(得分:0)

很高兴您找到了答案。 您的代码是准确的,直到以下行

url = "http://domain1.com, http://domain2.com, http://domain3.com, http://domain4.com"
separated_urls = url.split(', ')
list_of_threes = [3] * len(separated_urls)
combined_list = zip(separated_urls, list_of_threes)

问题是你的演员。只需将combined_list投射到list

即可
print (list(combined_list))

和宾果,你得到你的输出

[('http://domain1.com', 3), ('http://domain2.com', 3), ('http://domain3.com', 3), ('http://domain4.com', 3)]