2013-04-20 7 views
3

У меня есть что-то вродеPython Упорядоченный словарь регулярно словарь

[('first', 1), ('second', 2), ('third', 3)] 

и я хочу встроенную функцию, чтобы сделать что-то вроде

{'first': 1, 'second': 2, 'third': 3} 

Кто-нибудь известно о встроенной функции питона, которая обеспечивает что вместо того, чтобы иметь петлю для ее обработки?

потребности работать с питоном> = 2,6

+1

Ваш вход не упорядоченный словарь. Это список кортежей. Вы хотите сохранить порядок записей или нет? –

+0

Вы используете 'collections.OrderedDict' или нет? – jamylak

+0

@TimPietzcker Я назвал __dict__ на инспектировать.getframeinfo (frame) – WojonsTech

ответ

9

dict может взять список кортежей и преобразовать их в пар ключ-значение.

>>> lst = [('first', 1), ('second', 2), ('third', 3)] 
>>> dict(lst) 
{'second': 2, 'third': 3, 'first': 1} 
+0

Идеально это сработало как шарм – WojonsTech

4

Просто нанесите dict() к списку:

In [2]: dict([('first', 1), ('second', 2), ('third', 3)]) 
Out[2]: {'first': 1, 'second': 2, 'third': 3} 
+0

Идеально это работало как шарм – WojonsTech

1

Не так много, элегантный/простой, как dict(my_list) предложенный ответ Волатильность в ...

Я хотел бы также предложить:

my_list = [('first', 1), ('second', 2), ('third', 3)] 
my_dict = {k:v for k,v in my_list} 

Это более полезно, когда вам нужно отфильтровать некоторые элементы из оригинала л.

my_list = [('first', 1), ('second', 2), ('third', 3)] 
my_dict = {k:v for k,v in my_list if k!='third'} 

или

my_dict = {k:v for k,v in my_list if test_value(v)} # test_value being a function return bool 

в комментарии говорит, что это работает только для питона> = 2,7

+0

любой расон, почему вы предлагаете этот путь по другим путям и делаете вы знаете, будет ли это работать в python> = 2.6 – WojonsTech

+1

Не над dict (my_list), который я нахожу наиболее pythonic. Но я часто пользовался списком и пониманием dict, поэтому я использую его для python> = 2.7. Я предлагаю, что это одна из причин, по которой в большинстве случаев есть условия для элементов, которые собираются сделать в конечном словаре, а механизм компиляции текста и понимания списка облегчает фильтрацию 'my_dict = {k: v для k, v в my_list if k! = 'third'} '. Я добавляю несколько других примеров к этим вопросам. –

+1

В этом сценарии нет оснований использовать это. 'dict (...)' работает быстрее, выглядит лучше и работает на каждом Python. Это ** только ** работает на> = 2,7 – jamylak

Смежные вопросы