python中将列表转为字典_在Python中将列表转换为字典

假设我有一个python中的a列表,它的条目可以方便地映射到字典中。每个偶数元素表示字典的键,下面的奇数元素是值

例如,

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

我想把它转换成一本字典b,在那里

b['hello'] = 'world'

b['1'] = '2'

实现这一点的语法上最干净的方法是什么?

使用python从列表中生成字典的可能副本

b = dict(zip(a[::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中最为常见的方法,尽管正如eol在评论中指出的那样,zip()在python3中已经很懒惰了,所以您不需要izip()。

i = iter(a)

b = dict(zip(i, i))

如果你想把它放在一行上,你就必须作弊并用分号。-)

…或者在python 3中简单地说是zip(i, i),因为zip()现在返回一个迭代器。

注意,python 2.7.3也有听写理解

简单的答案

另一个选项(Alex Martelli提供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}

这是专为python 3设计的吗?

适用于python 2.4。谢谢。

使用fromkeys。埃多克斯1〔10〕

这是在做一些事情,而不是在问问题。

您可以很容易地使用听写理解:

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]

我觉得很酷,如果你的列表只有两个项目:

ls = ['a', 'b']

dict([ls])

>>> {'a':'b'}

记住,dict接受任何包含iterable的iterable,其中iterable中的每个项本身必须是一个iterable,并且只有两个对象。

快速而简单的一个,如果列表包含两个以上的项,只需添加,然后使用dict(ls)而不是dict([ls])。例如,如果ls=['a'、'b'、'c'、'd']则为dict(ls)

不错,而且很光滑。"iterable中的每个项本身必须是具有两个对象的iterable。'是这里的关键事实。

您可以在不创建额外数组的情况下非常快速地执行此操作,因此即使对于非常大的数组,也可以执行此操作:

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

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

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

这将生成具有相同键和值对的字典({'hello':'hello','world':'world','1':'1','2':'2'})

不,一切都很好。请仔细阅读。它说:"如果你有一个发电机A……",如果你没有发电机,就用第一条线。第二种方法是一种替代方法,如果您有一个生成器而不是一个列表,这是非常有用的,因为大多数情况下都是这样。

你说得对,对不起

可能不是最凶猛的Python,但是

>>> b = {}

>>> for i in range(0, len(a), 2):

b[a[i]] = a[i+1]

了解enumerate

枚举不允许指定步骤大小,但可以使用for i, key in enumerate(a[::2]):。由于dict构造器可以为您完成大部分工作,所以仍然是不完整的。

@辛格布尔:非常感谢你开阔了我的视野!我以后一定会尽可能多地把它合并起来!

@格尼布尔:你能再多解释一点关于for i, key in enumerate(a[::2]):方法的工作原理吗?生成的成对值将是0 hello和1 1,我不清楚如何使用它们来生成{'hello':'world', '1':'2'}。

@马蒂诺,你说得对。我想我的意思一定是enumerate(a)[::2]。

对于这个转换,我也非常感兴趣有一个一行程序,因为这样的列表是Perl中散列的默认初始值设定项。

这条线索给出了非常全面的答案。-

python将列表转换为字典

小精灵

我的一个我是Python的新手),使用Python2.7生成器表达式,将是:

埃多克斯1〔6〕

您也可以这样做(在这里进行字符串到列表的转换,然后转换为字典)

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

{x: a[a.index(x)+1] for x in a if a.index(x) % 2 ==0}

result : {'hello': 'world', '1': '2'}

您也可以尝试这种方法,将键和值保存在不同的列表中,然后使用dict方法

data=['test1', '1', 'test2', '2', 'test3', '3', 'test4', '4']

keys=[]

values=[]

for i,j in enumerate(data):

if i%2==0:

keys.append(j)

else:

values.append(j)

print(dict(zip(keys,values)))

输出:

{'test3': '3', 'test1': '1', 'test2': '2', 'test4': '4'}

尝试以下代码:

>>> d2 = dict([('one',1), ('two', 2), ('three', 3)])

>>> d2

{'three': 3, 'two': 2, 'one': 1}

我不确定这是不是Python,但似乎管用

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

`

这不是问题所要求的。


版权声明:本文为weixin_29458017原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。