Python:如何访问OrderedDict中的每一个第k个键?

2024-05-23 14:37:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个订购信息(钥匙已订购):

od1 = {0:10, 1:3, 2:7, 3:11, 4:30, 5:15, 6:19, 7:4, 8:3}

我想要一个包含键:值对每一个od1的第二个元素。也就是说,我想要:

od2 = {0:10, 2:7, 4:30, 6:19, 8:3}

我试过:

od2 = OrderedDict()
od2 = {k:v for k, v in od1.items() if k % 2 == 0}

然而,这并不能给我一个有序的字典,也不能给我所有的键。相反,我得到的不是我想要的:

{0: 10, 8: 3, 2: 7, 4: 30, 6: 19}

如何获得一个新的orderedict()对象,该对象包含每个第k个键及其关联值?你知道吗


Tags: 对象in信息元素forif字典items
3条回答

您可以使用enumerate

import collections
new_d = collections.OrderedDict([a for i, a in enumerate(od1.items()) if i%2 == 0])

输出:

OrderedDict([(0, 10), (2, 7), (4, 30), (6, 19), (8, 3)])

因为您是从ordered dict开始的,所以只需使用以下代码段(Python2.7):

from collections import OrderedDict

od1 = OrderedDict([(0, 10), (1, 3), (2, 7), (3, 11), (4, 30), (5, 15), (6, 19), (7, 4), (8, 3)])
c = od1.items()[::2]

print OrderedDict(c)  # OrderedDict([(0, 10), (2, 7), (4, 30), (6, 19), (8, 3)])

对于Python3.6,它有一点不同:

from collections import OrderedDict

od1 = OrderedDict([(0, 10), (1, 3), (2, 7), (3, 11), (4, 30), (5, 15), (6, 19), (7, 4), (8, 3)])
c = list(od1.items())[::2]
print(OrderedDict(c)) # OrderedDict([(0, 10), (2, 7), (4, 30), (6, 19), (8, 3)])

od.items上使用itertools.islice

>>> od
OrderedDict([(0, 10), (1, 3), (2, 7), (3, 11), (4, 30), (5, 15), (6, 19), (7, 4), (8, 3)])

然后简单地说:

>>> from itertools import islice
>>> OrderedDict(islice(od.items(), None, None, 2))
OrderedDict([(0, 10), (2, 7), (4, 30), (6, 19), (8, 3)])

或者,例如,每三个键:

>>> OrderedDict(islice(od.items(), None, None, 3))
OrderedDict([(0, 10), (3, 11), (6, 19)])

islice的工作原理类似于列表切片,例如my_list[::2]my_list[::3],但是,它适用于任何iterable,不支持负步长值,并且必须使用显式的None值,但原理是相同的。你知道吗

相关问题 更多 >