- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在 python 2 中,当使用 OrderedDict
时,我能够通过简单地使用返回列表的 keys
方法按插入顺序获取键。然而在 python 3 中:
rows = OrderedDict()
rows[0]=[1,2,3]
rows[1]=[1,2,3]
image = [rows[k] for k in rows.keys()[:2]]
我得到:
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: 'odict_keys' object is not subscriptable
我当然可以按照建议做 list(rows)[:2]
例如 here -但这能保证让我按顺序拿到 key 吗?这是正确的方法吗?
更新:python 2 代码会更好:
image = [v for v in rows.values()[:2]]
当然在 python 3 上仍然会出现同样的错误
最佳答案
@mglison 是对的。因为 OrderedDict
遵循迭代器协议(protocol),所以可以保证 yield
以正确的顺序将键传递给 list()
:
但是,就像@mglison 也提到的那样,itertools.islice()
会比简单地使用 list
和下标更好、更高效。在使用 timeit
模块对这两种方法进行多次计时后,itertools
方法大约快了 2 倍。以下是确切的数字:
在获得 list(itertools.islice(rows, 2))
和 list(rows.keys())[:2]
(请注意,我多次将 islice()
的结果转换为一个列表),看来使用后一种方法实际上稍微快一些:
---------------------------------------------------------------
| list(itertools.islice(rows, 2)) | 1.5023668839901838 |
---------------------------------------------------------------
| list(rows.keys())[:2] | 1.495460570215706 |
---------------------------------------------------------------
然而,这两个数字的差异是如此之小,我真的不会对你使用哪种方法有太大的区别。只需为您的具体情况选择最易读和最容易理解的方法。
关于python - python 3 中的 OrderedDict - 如何按顺序获取键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44147047/
我现在很迷茫。我正在使用 PyYAML 编辑一些 YAML 文件。 data = yaml.load_all(open('testingyaml.yaml'),Loader=yaml.RoundTri
嗨,我想解析一些 order_dicts。我有以下错误 ipdb> for elem in my_orderdict['codeBook'].keys(): print("{0}
我正在尝试通过 'depth' 键对 OrderedDict 中的 OrderedDict 进行排序。有什么解决方案可以对该 Dictionary 进行排序吗? OrderedDict([ (2,
我试图确定不同 numpy orderdict 对象中保存的两个值是否相同。 这两个字典都是通过使用 turbodbc 中的 fetchallnumpy() 选项创建的,并且包含两个键。第一个键是 i
我有两个有序的字典 D1 和 D2。我想将 D2 的键名分配给 D1(覆盖 D1 的现有键名)。如何做到这一点? 例子: D1 = {'first_key': 10, 'second_key': 20
我有一个看起来像是一个 OrderdDict 的东西,其中包含我所指的“主”OrderedDict 的子集中的 OrderedDict。我正在尝试将此对象解析为 Pandas DataFrame。 (
我正在尝试向 mysql 中插入一个有序的字典,但我认为我遗漏了一个简单的项目。 sql_command = """CREATE TABLE asdf ( id INTEGER PRIMARY KEY
我有一个OrderedDict,我需要在保持排序的同时添加一个元素 import sys import bisect from collections import OrderedDict arr =
我有一个 python OrderedDict,当我只更新一个键值时,所有其他键值对也会更新。我已经包含了下面的源代码和跟踪。 我期望有一个 key 对 (2014, {'start': 2014,
import collections d = collections.defaultdict(dict) d["i"]["a"] = "111" d["i"]["b"] = "222" print d
在脚本中,我有一个 OrderedDict groups,它按字母顺序获取键/值对。 在脚本的另一部分,我正在检查与 key 相同的文件,如下所示: for (key, value) in group
想法是这样的:我有一个像这样的 orderedDict(简化版): {'012013': 3, '022013': 1, '032013': 5} 我想做的是通过以某种方式迭代它来累积所有值。例如,我
这个循环的想法是遍历一个列表。如果对象的某个属性不是 OrderedDict 的键,它将添加它。它是对象列表的字典 for object in someList: if object.DATE n
我正在尝试找出如何打印一个列表 storeItems,其中包含 3 个 OrderedDict(),并且能够打印 key 和每个 OrderedDict 的 value。我不知道如何解决这个问题,这就
我以为我为自己设定了一个简单的项目,但我想不是。我认为我长期使用 Ordered dict 函数是因为我不断得到: ValueError: too many values to unpack (ex
OrderedDict([(u'attributes', OrderedDict([(u'type', u'Campaign__c'), (u'url', u'/services/data/v29.0
我有这个代码: self.statusIcons = collections.OrderedDict for index in guiConfig.STATUS_ICON_SETS: sel
我有以下相当复杂的数据结构: temp_dict = { 'a': { 'aardvark': (6,True), 'apple': (3,True)
OrderedDict 能否获得关键位置? 类似于 index() 的 list test = ['a', 'b', 'c', 'd', 'e'] test.index('b') # return 1
我在回答关于 SO 的其中一个问题时偶然发现了 OrderedDict 的这种行为,我无法解释。它进行如下你有一个看起来像这样的字典: exmpl = OrderedDict([(30, ('A1'
我是一名优秀的程序员,十分优秀!