python - 为什么打印后不能从枚举数据集创建字典?

标签 python python-3.x iterator enumerate

我正在和enumerate()一起练习和 python 中的字典。当我不打印枚举数据时,我可以根据枚举数据创建字典。但是当我打印出枚举数据时,我无法再创建字典。为什么会这样?

当我不打印我的枚举数据时:

data = ['a','b','c','d']

enum_data = enumerate(data, 1)

data_dict = dict(enum_data)
print("Data Dict: ", data_dict)

print("Should be 'a': ", data_dict.get(1))

我的输出是

Data Dict:  {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
Should be 'a':  a

但是当我不这样做时:

data = ['a','b','c','d']

enum_data = enumerate(data, 1)
for enum, point in enum_data:
    print("Count: ", enum, " ", "Element: ", point)

data_dict = dict(enum_data)
print("Data Dict: ", data_dict)

print("Should be 'a': ", data_dict.get(1))

我得到:

Count:  1   Element:  a
Count:  2   Element:  b
Count:  3   Element:  c
Count:  4   Element:  d
Data Dict:  {}
Should be 'a':  None

最佳答案

enumerate返回一个迭代器。迭代器 may only be iterated over once .

常见的解决方案是使用 itertools.tee返回任意数量的独立迭代器:

from itertools import tee

data = ['a','b','c','d']

enum_data1, enum_data2 = tee(enumerate(data, 1), 2)
for enum, point in enum_data1:
    print("Count: ", enum, " ", "Element: ", point)

data_dict = dict(enum_data2)

print("Data Dict: ", data_dict)  # {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
print("Should be 'a': ", data_dict.get(1))  # a

关于python - 为什么打印后不能从枚举数据集创建字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54353201/

相关文章:

C++ Vector 遍历抽象类

python - 一行 for 循环将元素添加到 Python 中的列表

python - vscode - 从.py文件所在的当前文件夹读取文件

python - 在Python中读取文件后正确分割字符串

python-3.x - 使用@rpath/libpoppler.71.dylib 找不到图像

python-3.x - 如何为 pygame 创建这个 tkinter 菜单栏

java - 迭代器困惑

Python:创建一个可以循环迭代的类

python - 在 numpy 数组中查找平均值最高的行

python-3.x - 使用 ctypes 检索 native 基类的地址