2015-03-03 31 views
0

是否有可能在字典中迭代列表?看起来像一个复杂的语法。为什么在这本词典中有一个循环?

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} 

回答

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)