将生成器对象转换为字典

时间:2013-07-23 16:34:01

标签: python

这是我的代码:

# library to extract cookies in a http message
cj = cookielib.CookieJar()

... do connect to httpserver etc

cdict = ((c.name,c.value) for c in cj)

此代码的问题是cdict是一个生成器。但我想简单地创建一本字典。如何更改要分配给字典的最后一行?

5 个答案:

答案 0 :(得分:13)

使用词典理解。 (在Python 2.7中引入)

cdict = {c.name:c.value for c in cj}

例如,

>>> {i:i*2 for i in range(10)}
{0: 0, 1: 2, 2: 4, 3: 6, 4: 8, 5: 10, 6: 12, 7: 14, 8: 16, 9: 18}

以下是引入词典理解的PEP。它可能很有用。

如果您使用的是Python 2.7以下的内容。 - 构建一个键值对列表并在其上调用dict(),就像这样。

>>> keyValList = [(i, i*2) for i in range(10)]
>>> keyValList
[(0, 0), (1, 2), (2, 4), (3, 6), (4, 8), (5, 10), (6, 12), (7, 14), (8, 16), (9, 18)]
>>> dict(keyValList)
{0: 0, 1: 2, 2: 4, 3: 6, 4: 8, 5: 10, 6: 12, 7: 14, 8: 16, 9: 18}

OR 只需将您的生成器传递给dict()方法即可。像这样的东西

>>> dict((i, i*2) for i in range(10))
{0: 0, 1: 2, 2: 4, 3: 6, 4: 8, 5: 10, 6: 12, 7: 14, 8: 16, 9: 18}

答案 1 :(得分:1)

使用dict comprehension{c.name:c.value for c in cj}

答案 2 :(得分:1)

您可以使用dict comprehension

cdict = {c.name: c.value for c in cj}

答案 3 :(得分:1)

我想说最简单的方法就是使用 dict() 构造函数。举个例子:

def create_dummy_generator():
for i in range(10):
    yield i, i*2
x = create_dummy_generator()
y = dict(x)
type(x)
# <class 'generator'>
print(x)
# <generator object create_generator at 0x7fde3c562f90>
type(y)
# <class 'dict'>
print(y)
# {0: 0, 1: 2, 2: 4, 3: 6, 4: 8, 5: 10, 6: 12, 7: 14, 8: 16, 9: 18}

答案 4 :(得分:0)

您可以使用:

cdict = {c.name:c.value for c in cj}