首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按索引访问collections.OrderedDict中的项

按索引访问collections.OrderedDict中的项
EN

Stack Overflow用户
提问于 2012-04-07 20:34:19
回答 9查看 230.2K关注 0票数 175

假设我有以下代码:

代码语言:javascript
运行
复制
import collections
d = collections.OrderedDict()
d['foo'] = 'python'
d['bar'] = 'spam'

是否有办法以编号的方式访问这些项目,例如:

代码语言:javascript
运行
复制
d(0) #foo's Output
d(1) #bar's Output
EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2012-04-07 20:46:29

如果它是一个OrderedDict(),您可以通过获得(键,值)对的元组来轻松地访问元素,如下所示

代码语言:javascript
运行
复制
>>> import collections
>>> d = collections.OrderedDict()
>>> d['foo'] = 'python'
>>> d['bar'] = 'spam'
>>> d.items()
[('foo', 'python'), ('bar', 'spam')]
>>> d.items()[0]
('foo', 'python')
>>> d.items()[1]
('bar', 'spam')

用于Python3.x的注释

dict.items将返回一个可迭代dict视图对象而不是一个列表。为了使索引成为可能,我们需要将调用包装到列表中。

代码语言:javascript
运行
复制
>>> items = list(d.items())
>>> items
[('foo', 'python'), ('bar', 'spam')]
>>> items[0]
('foo', 'python')
>>> items[1]
('bar', 'spam')
票数 219
EN

Stack Overflow用户

发布于 2014-04-08 04:29:40

您是否必须使用OrderedDict,或者您是否特别希望以某种方式排序的类似地图的类型具有快速的位置索引?如果是后者,则考虑Python的多个排序迪克类型之一(它根据键排序顺序对键值对排序)。一些实现还支持快速索引。例如,分类容器项目有一个用于此目的的SortedDict类型。

代码语言:javascript
运行
复制
>>> from sortedcontainers import SortedDict
>>> sd = SortedDict()
>>> sd['foo'] = 'python'
>>> sd['bar'] = 'spam'
>>> print sd.iloc[0] # Note that 'bar' comes before 'foo' in sort order.
'bar'
>>> # If you want the value, then simple do a key lookup:
>>> print sd[sd.iloc[1]]
'python'
票数 26
EN

Stack Overflow用户

发布于 2014-06-29 19:38:10

这里有一个特例,如果您想要在OrderedDict中第一个条目(或接近它),而不创建一个列表。(这已更新为Python 3):

代码语言:javascript
运行
复制
>>> from collections import OrderedDict
>>> 
>>> d = OrderedDict()
>>> d["foo"] = "one"
>>> d["bar"] = "two"
>>> d["baz"] = "three"
>>> next(iter(d.items()))
('foo', 'one')
>>> next(iter(d.values()))
'one'

(当你第一次说"next()“时,它的意思就是”第一次“。)

在我的非正式测试中,带有小next(iter(d.items()))的OrderedDict只比items()[0]快一点点。OrderedDict为10,000个条目,next(iter(d.items()))items()[0]快200倍。

但是--如果您只保存项目()列表一次,然后大量使用该列表,这可能会更快。或者,如果您重复{创建一个items()迭代器并将其遍历到您想要的位置},则可能会慢一些。

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

https://stackoverflow.com/questions/10058140

复制
相关文章

相似问题

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