Python 搁置和随机迭代器

标签 python iterator iterable shelve

我想为搁置键值存储创建一个迭代器,该迭代器可以多次使用,但每次都以不同的顺序返回值。搁置迭代器以随机顺序返回值,但每次调用时顺序不会改变。这是一个例子:

进口货架

# store key-value pairs with shelve
d = shelve.open('kv_store')
kv = {'a': 9, 'b': 8, 'c': 7, 'd': 6}
for key in kv.keys():
    d[str(key)] = kv[key]
d.close()

# create iterator for key-value store
d = shelve.open('kv_store')
iterator = iter(d)
for i in iterator:
    print(i)
d.close()

> b
> d
> a
> c

# repeat create iterator for key-value store
d = shelve.open('kv_store')
iterator = iter(d)
for i in iterator:
    print(i)
d.close()

> b
> d
> a
> c

如何让搁置迭代器每次以不同的顺序返回值(例如使用 random.shuffle)?

最佳答案

如果你想调用 shuffle,你需要将迭代器设为列表:

iterator = list(d)
shuffle(iterator)

shuffle 需要一个列表,因此您需要通过 d 上的调用列表将其传递给它以获取键列表。

您也不需要调用 iter 除非您确实想要一个迭代器,您可以只迭代 d

关于Python 搁置和随机迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30369772/

相关文章:

c++ - 调用 erase() 后 std::map::iterator 出现问题

python - 测试某个值是否不是由迭代器产生的

odoo - 类型错误 : 'int' object is not iterable in wizard

python - "global name ' forloop ' is not defined "在 django View :ERROR

python - 从 Python 中的切片对象中检索切片的长度

java - Spark 1.6 : How do convert an RDD generated from a Scala jar to a pyspark RDD?

c++11 - 什么样的迭代器支持随机访问但不支持 C++ 中的连续存储?

python - 使用 API 将通用二进制文件上传到 GDrive

iterator - 为什么我们不实现 Iterator 中的所有函数来实现一个迭代器呢?

Scala:通过生成器(可迭代)公开 JDBC ResultSet