在python中迭代两个列表

时间:2014-01-24 09:36:22

标签: python arrays list python-2.7

我有一个使用dirs = os.listdir(dir/path)创建的文件名列表。

我也是从csv文件导出数据集。 stocks = csv.reader(open('config.csv', 'rb'))

样本库存数据:

  

FILENAME1,URL1

     

文件名2,URL2

我需要做的是在python脚本中获取dirs列表中每个文件的每个url。提前谢谢。

2 个答案:

答案 0 :(得分:6)

Pytho为此提供了一个内置函数zip

for dir, stock, in zip(dirs, stocks)

演示:

>>> a = ["cat", "dogs"]
>>> b = ["http://cat-service.com", "http://dogs-care.com"]
>>> for animal, site in zip(a, b):
    print(animal, site)


cat http://cat-service.com
dogs http://dogs-care.com

看,这不难,对吗? Python让我们的生活更轻松! :)

备选方案:如果效果真的很重要,请使用itertools.izip

更新

原来上面的答案不是OP所要求的。好吧,和史蒂夫一样,我会用这个字典:

stock_dict = dict(stock)
urls = [stock_dict.get(file, "Not found") for file in dirs]

演示:

我们假设目录中有3个文件,其中列出了两个。

>>> stock = [("fileName1","url1"), ("fileName2","url2")]
>>> stock_dict = dict(stock)
>>> dirs = ["fileName1", "fileName2", "fileName3"]
>>> urls = [stock_dict.get(file, "Not found") for file in dirs]
>>> urls
['url1', 'url2', 'Not found']

希望这有帮助!

答案 1 :(得分:2)

假设一切都适合记忆:

stockslookup = dict(stocks)
urls = [stockslookup[filename] for filename in dirs]

请注意,文件名必须是完全相同的字符串,因此您可能希望在两者(或os.path.abspath)上使用os.path.normpath