2009-02-23 2 views
7

Есть более краткий способ сделать это в Python ?:Что такое Pythonic способ объединить две последовательности в словарь?

def toDict(keys, values): 
    d = dict() 
    for k,v in zip(keys, values): 
    d[k] = v 

    return d 
+0

Наряду с правильными ответами, которые у вас были до сих пор для этой техники, я укажу, что при указании функции «to_dict» является более Pythonic, чем «toDict». См. [PEP 8] (http://www.python.org/dev/peps/pep-0008 «PEP 8») для рекомендаций стиля для написания кода Python. – bignose

+0

+1 для того, чтобы помочь кому-то, кто явно интересуется «способом». – physicsmichael

+0

Спасибо за хед-ап. Тем не менее, это скорее относится к обозреваемому вопросу в соответствии с «Руководством по стилю кодирования Python». – guillermooo

ответ

4

Если keys 'размер может быть больше, а затем values' один, то вы можете использовать itertools.izip_longest (Python 2.6), который позволяет задать значение по умолчанию для остальных ключей:

from itertools import izip_longest 

def to_dict(keys, values, default=None): 
    return dict(izip_longest(keys, values, fillvalue=default)) 

Пример:

>>> to_dict("abcdef", range(3), 10) 
{'a': 0, 'c': 2, 'b': 1, 'e': 10, 'd': 10, 'f': 10} 

Примечание: itertools.izip*() функция в отличии от zip() функции возврата итераторов не списки.