2016-04-27 4 views
0

Рассмотрим У меня есть кортеж в PythonДля каждого в списке Python

numbers = (('One', 1), ('Two', 2), ('Three', 3), ('Four', 4)) 

Я хочу создать в словаре в numbers_dict

numbers_dict = {} 
for number in numbers: 
    numbers_dict[number[0]] = number[1] 

и поэтому я получаю

numbers_dict = { 
    'One': 1, 
    'Two': 2, 
    'Three': 3, 
    'Four': 4, 
} 

Могу ли я сделать что-то более простое использование синтаксиса

numbers_dict = [n[0] : n[1] for n in numbers] 

?

ответ

4

Просто передайте numbersнепосредственно к dict() type:

numbers_dict = dict(numbers) 

Из документации:

Если позиционное аргумент задан, а это объект отображения, словарь создается с такие же пары ключ-значение, что и объект сопоставления. В противном случае позиционный аргумент должен быть итерируемым объектом. Каждый элемент в iterable должен быть итерабельным с ровно двумя объектами. Первым объектом каждого элемента становится ключ в новом словаре, а второй объект - соответствующее значение.

Ваш numbers кортеж такой итератор, и каждый элемент в нем является (key, value) пара.

Демо:

>>> numbers = (('One', 1), ('Two', 2), ('Three', 3), ('Four', 4)) 
>>> dict(numbers) 
{'One': 1, 'Four': 4, 'Three': 3, 'Two': 2} 

Вы можете использовать dictionary comprehension тоже, но это действительно избыточна здесь; используйте это только тогда, когда вы делаете что-то более значимое для каждого ключа или значения. Но для полноты, это будет выглядеть так:

numbers_dict = {k: v for k, v in numbers} 
Смежные вопросы