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

увидеть List Comprehensions section руководства Python и далее, где объясняются другие соображения.

Для понимания Dict требуется Python 2.7 или новее; если вам нужно портировать обратно в старые версии Python, вы бы использовать синтаксис выражений генератора внутри dict() функции для получения (key, value) кортежей:

dict((executor.submit(load_url, url, 60), url) for url in URLS) 
Смежные вопросы