首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python搁置和随机迭代器

Python搁置和随机迭代器
EN

Stack Overflow用户
提问于 2015-05-21 09:29:09
回答 2查看 616关注 0票数 1

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

进口货架

代码语言:javascript
运行
复制
# 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)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-21 09:41:14

如果你想调用洗牌,你需要让迭代器列表:

代码语言:javascript
运行
复制
iterator = list(d)
shuffle(iterator)

shuffle需要一个列表,所以您需要在d上逐个传递一个调用列表,以获得一个键列表。

你也不需要调用iter,除非你真的想要一个迭代器,你可以只在d上迭代。

票数 1
EN

Stack Overflow用户

发布于 2015-05-21 09:44:18

您只需要从底层的dict实现中获得未定义的顺序。试试看,这对任何类似于白痴的人都有用:

代码语言:javascript
运行
复制
def random_dict_iter(x):
    _x = x.keys()
    random.shuffle(_x)
    return _x           # or if you like: return iter(_x)

编辑:正如@Padraic在评论中指出的那样,his answer是更好的。它不仅在Python3中工作,而且更简洁。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30369772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档