为什么这本词典中有一个循环?

时间:2015-03-03 07:59:24

标签: python dictionary

是否可以在字典中迭代列表?看起来像一个复杂的语法。

URLS = ['http://www.foxnews.com/',
    'http://www.cnn.com/',
    'http://europe.wsj.com/',
    'http://www.bbc.co.uk/',
    'http://some-made-up-domain.com/']

future_to_url = {executor.submit(load_url, url, 60): url for url in URLS}

1 个答案:

答案 0 :(得分:3)

你正在看dictionary comprehension;它从循环中构建一个字典。

相当于:

future_to_url = {}
for url in URLS:
    future_to_url[executor.submit(load_url, url, 60)] = url

但拼写更简洁。

可以做同样的事情来产生一个清单:

[executor.submit(load_url, url, 60) for url in URLS]

或设置:

{executor.submit(load_url, url, 60) for url in URLS}

或在生成器表达式中懒惰地生成元素:

(executor.submit(load_url, url, 60) for url in URLS)

请参阅Python教程的List Comprehensions section,然后再解释其他解释。

Dict理解需要Python 2.7或更新版本;如果你需要将它移植回较旧的Python版本,你可以在dict()函数中使用生成器表达式语法来生成(key, value)元组:

dict((executor.submit(load_url, url, 60), url) for url in URLS)