Python-为什么我无法在生成器中获取字典项?

时间:2018-12-05 23:18:50

标签: python-3.x generator

我创建了一个生成器,该生成器从一个大型CSV文件中读取每一行,并返回每一行:

def csv_reader(filename):
    import csv
    with open(filename) as f:
        reader = csv.DictReader(f)
        for line in reader:
            yield  dict(line)


filename = "output.csv"
generator = csv_reader(filename)

我知道如何迭代生成器并获得输出:

# Iterate Generator
for g in generator:
    print(g)

这将打印字典。

但是,如何访问每个词典中每个键的值?以下内容未返回任何内容。

for g in generator:
    print(g['user'])

这也不起作用:

>>> for g in generator:
...     alist.append(g.keys())
...     alist
... 
>>> alist
[]

1 个答案:

答案 0 :(得分:1)

好像您正在迭代一个空的生成器。

我的意思是,一旦迭代了生成器一次,它就会被清空,而再次对其进行迭代将无济于事:

>>> def some_generator():
...     yield 1
...     yield 2
...     yield 3
... 
>>> generator = some_generator()
>>> for g in generator:
...     print(g)
... 
1
2
3
>>> for g in generator:
...     print(g)
... 

有两种解决方法:要么将生成器结果存储在列表中,以便您可以多次迭代列表(消耗内存),要么重新创建生成器(在读取文件时消耗I / O)。

所以:

>>> for g in some_generator():
...     print(g)
... 
1
2
3
>>> for g in some_generator():
...     print(g)
... 
1
2
3

或:

>>> values = list(some_generator())
>>> for g in values:
...     print(g)
... 
1
2
3
>>> for g in values:
...     print(g)
... 
1
2
3