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

add value to a list and convert to list of tuples

我正在阅读一些日志文件,并且有一个 url 的列表,如下所示:

url 看起来像这样,每个 url

之后都有新行
http://domain1.com
http://domain2.com
http://domain3.com
http://domain4.com

我现在想创建一个元组并为每个元组添加一个值 url。所有值都相同。 它应该是这样的。

('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),)

有人可以为我提供一些帮助以获得所需的输出吗?

谢谢

在代码语句 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)]

使用列表理解

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

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

您可以通过两种方式轻松完成。

1) 老派的 for 循环方式:

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”。

很高兴您找到了答案。 您的代码在以下几行之前都是准确的

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