我想为搁置键值存储创建一个迭代器,该存储可以多次使用,但每次都以不同的顺序返回值。搁置迭代器以随机顺序返回值,但每次调用时顺序不会改变。下面是一个示例:
进口货架
# 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)?
发布于 2015-05-21 09:41:14
如果你想调用洗牌,你需要让迭代器列表:
iterator = list(d)
shuffle(iterator)
shuffle
需要一个列表,所以您需要在d
上逐个传递一个调用列表,以获得一个键列表。
你也不需要调用iter
,除非你真的想要一个迭代器,你可以只在d
上迭代。
发布于 2015-05-21 09:44:18
您只需要从底层的dict实现中获得未定义的顺序。试试看,这对任何类似于白痴的人都有用:
def random_dict_iter(x):
_x = x.keys()
random.shuffle(_x)
return _x # or if you like: return iter(_x)
编辑:正如@Padraic在评论中指出的那样,his answer是更好的。它不仅在Python3中工作,而且更简洁。
https://stackoverflow.com/questions/30369772
复制相似问题