2015-03-03 30 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)