将列表转换为Python中的字典

比方说,我有一个Python列表,它的条目可以方便地映射到一个字典。 每个偶数元素代表字典的关键字,下面的奇数元素是值

例如,

 a = ['hello','world','1','2'] 

我想把它转换成字典b ,在哪里

 b['hello'] = 'world' b['1'] = '2' 

语法上最干净的方法是什么?

 b = dict(zip(a[0::2], a[1::2])) 

如果a很大,你可能会想要做一些像下面这样的事情,而不是像上面那样做任何临时列表。

 from itertools import izip i = iter(a) b = dict(izip(i, i)) 

在Python 3中,你也可以使用一个词典理解,但讽刺的是,我认为最简单的方法是使用range()len() ,这通常是一种代码味道。

 b = {a[i]: a[i+1] for i in range(0, len(a), 2)} 

所以iter()/izip()方法仍然可能是Python 3中最为Pythonic,尽管EOL在评论中指出, zip()在Python 3中已经是懒惰的,所以你不需要izip()

 i = iter(a) b = dict(zip(i, i)) 

如果你想在一行上,你将不得不作弊,并使用分号。 😉

另一种选择(亚历克斯·马尔泰利提供https://stackoverflow.com/a/2597178/104264 ):

 dict(x[i:i+2] for i in range(0, len(x), 2)) 

另外如果你有这个:

 a = ['bi','double','duo','two'] 

你需要这个(列表的每个元素键入一个给定的值(在这个例子中是2)):

 {'bi':2,'double':2,'duo':2,'two':2} 

您可以使用:

 >>> dict((k,2) for k in a) {'double': 2, 'bi': 2, 'two': 2, 'duo': 2} 

你可以很容易地使用dict理解:

 a = ['hello','world','1','2'] my_dict = {item : a[index+1] for index, item in enumerate(a) if index % 2 == 0} 

这相当于下面的for循环:

 my_dict = {} for index, item in enumerate(a): if index % 2 == 0: my_dict[item] = a[index+1] 

我发现很酷,这就是说,如果你的列表只有2个项目:

 ls = ['a', 'b'] dict([ls]) >>> {'a':'b'} 

请记住,dict接受任何包含iterable的迭代,其中iterable中的每个元素本身必须是一个具有两个对象的迭代。

可能不是最pythonic,但是

 >>> b = {} >>> for i in range(0, len(a), 2): b[a[i]] = a[i+1] 

你可以在不创建额外的数组的情况下快速完成,所以即使是非常大的数组也可以工作:

 dict(izip(*([iter(a)]*2))) 

如果你有一个发电机,甚至更好:

 dict(izip(*([a]*2))) 

这里是简介:

 iter(h) #create an iterator from the array, no copies here []*2 #creates an array with two copies of the same iterator, the trick izip(*()) #consumes the two iterators creating a tuple dict() #puts the tuples into key,value of the dictionary 

你也可以这样做(字符串在这里列出转换,然后转换成字典)

  string_list = """ Hello World Goodbye Night Great Day Final Sunset """.split() string_list = dict(zip(string_list[::2],string_list[1::2])) print string_list 

我也非常有兴趣为这个转换提供一个单线程,因为这样的列表是Perl中哈希的默认初始化程序。

在这个线程中给出了非常全面的答案 –

  • Python将列表转换为字典

使用Python 2.7 Generator Expressions开发一个我是Python的新手)将是:

dict((a[i], a[i + 1]) for i in range(0, len(a) - 1, 2))

我不确定这是pythonic,但似乎工作

 def alternate_list(a): return a[::2], a[1::2] key_list,value_list = alternate_list(a) b = dict(zip(key_list,value_list)) 
 #work~ ` a = ['Openstack','Puppet','Python'] b = {} c = 0 for v in a: b[v] = c c+=1 print b 

`

在Python中它非常简单:

 dict(a)