Python 搁置和随机迭代器
Python shelve and random iterator
我想为可多次使用但每次 returns 值以不同顺序使用的搁置键值存储创建一个迭代器。搁置迭代器 returns 的值以随机顺序排列,但顺序不会在每次调用时改变。这是一个例子:
进口货架
# 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
如何让搁置迭代器每次以不同的顺序指向 return 值(例如,使用 random.shuffle)?
如果你想调用 shuffle 你需要让迭代器成为一个列表:
iterator = list(d)
shuffle(iterator)
shuffle
需要一个列表,因此您需要通过 d
上的调用列表传递一个列表以获取键列表。
你也不需要调用 iter
除非你真的想要一个迭代器,你可以迭代 d
。
你只是从底层字典实现中得到了未定义的顺序。试试这个,适用于任何类似 dict 的东西:
def random_dict_iter(x):
_x = x.keys()
random.shuffle(_x)
return _x # or if you like: return iter(_x)
编辑:正如@Padraic Cunningham 在评论中指出的那样, 更好。不仅在Python3也行,而且更简洁
我想为可多次使用但每次 returns 值以不同顺序使用的搁置键值存储创建一个迭代器。搁置迭代器 returns 的值以随机顺序排列,但顺序不会在每次调用时改变。这是一个例子:
进口货架
# 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
如何让搁置迭代器每次以不同的顺序指向 return 值(例如,使用 random.shuffle)?
如果你想调用 shuffle 你需要让迭代器成为一个列表:
iterator = list(d)
shuffle(iterator)
shuffle
需要一个列表,因此您需要通过 d
上的调用列表传递一个列表以获取键列表。
你也不需要调用 iter
除非你真的想要一个迭代器,你可以迭代 d
。
你只是从底层字典实现中得到了未定义的顺序。试试这个,适用于任何类似 dict 的东西:
def random_dict_iter(x):
_x = x.keys()
random.shuffle(_x)
return _x # or if you like: return iter(_x)
编辑:正如@Padraic Cunningham 在评论中指出的那样,