2013-04-20 57 views
3

我有类似Python的有序字典常规字典

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

,我想一个内置的功能,使像

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

是任何人都知道的一个内置的Python函数提供而不是有一个循环来处理它?

需要与Python> = 2.6

+1

您的输入不是一个有序字典。这是一个元组列表。你想保留条目的顺序吗? – 2013-04-20 08:00:15

+0

你使用'collections.OrderedDict'还是不是? – jamylak 2013-04-20 08:20:51

+0

@TimPietzcker我在inspect.getframeinfo(框架)上调用了__dict__(框架) – WojonsTech 2013-04-20 08:25:04

回答

9

dict工作,可以采取一个元组列表,并将其转换为键值对。

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

完美的工作就像一个魅力 – WojonsTech 2013-04-20 07:47:12

4

只是适用dict()到列表:

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

完美的工作就像一个魅力 – WojonsTech 2013-04-20 07:46:37

1

还不如更高雅/简单dict(my_list)波动性的回答提出...

我也建议:

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

当你必须从原始过滤一些元素时它更有用l序列。

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 2013-04-20 08:19:05

+1

工作不超过我觉得最pythonic的字典(my_list)。但是我大部分时间都在使用list和dict理解,所以我将它用于python> = 2.7。我建议这样做的一个原因是,大部分时间都有可能产生最终字典的元素的条件,并且dict comprenhension和list comprehension机制使得过滤变得非常简单:my_dict = {k:v for k,v in my_list if k!='第三'}'。我在这些问题中增加了一些其他示例。 – 2013-04-20 08:24:10

+1

在这种情况下绝对没有理由使用它。 'dict(...)'更快,看起来更好,适用于每个Python。这**只适用于** = 2.7 – jamylak 2013-04-20 08:25:12