如何获得Python OrderedDict中的前3个元素?

如何获得Python OrderedDict中的前3个元素?,python,dictionary,ordereddictionary,Python,Dictionary,Ordereddictionary,如何获得Python OrderedDict中的前3个元素 也可以从该字典中删除数据 例如:如何获取Python OrderedDict中的前3个元素并删除其余元素?它与其他Dict没有什么不同: d = OrderedDict({ x: x for x in range(10) }) i = d.iteritems() a = next(i) b = next(i) c = next(i) d = OrderedDict([a,b,c]) # or d.clear() d.update([

如何获得Python OrderedDict中的前3个元素

也可以从该字典中删除数据


例如:如何获取Python OrderedDict中的前3个元素并删除其余元素?

它与其他Dict没有什么不同:

d = OrderedDict({ x: x for x in range(10) })

i = d.iteritems()
a = next(i)
b = next(i)
c = next(i)

d = OrderedDict([a,b,c])
# or
d.clear()
d.update([a,b,c])

让我们创建一个简单的
OrderedDict

>>> from collections import OrderedDict
>>> od = OrderedDict(enumerate("abcdefg"))
>>> od
OrderedDict([(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e'), (5, 'f'), (6, 'g')])
要分别返回前三个键、值或项,请执行以下操作:

>>> list(od)[:3]
[0, 1, 2]
>>> list(od.values())[:3]
['a', 'b', 'c']
>>> list(od.items())[:3]
[(0, 'a'), (1, 'b'), (2, 'c')]
要删除除前三项之外的所有内容,请执行以下操作:

>>> while len(od) > 3:
...     od.popitem()
... 
(6, 'g')
(5, 'f')
(4, 'e')
(3, 'd')
>>> od
OrderedDict([(0, 'a'), (1, 'b'), (2, 'c')])

您可以使用这种迭代方法来完成工作

x = 0
for i in ordered_dict:
    if x > 3:
        del ordered_dict[i]
    x += 1
首先,您只需创建一个计数器变量,
x
,并将其分配给0。然后在
命令中循环键。您可以通过查看
x
大于3来查看检查了多少项,这是您想要的值的数量。如果已经检查了3个项目,则从订购的项目中删除该项目


这里有一个更干净的替代方法(感谢评论)


其工作原理是使用enumerate为每个键分配一个数字。然后检查该数字是否小于2(0、1或2)。如果数字不是0、1或2(这将是前三个元素),那么字典中的该项将被删除。

啊,我明白你的意思了。我的错。您可以在这里使用
enumerate
。Nvm,但是的,enumerate更好。类似这样:
对于枚举中的i,k(odct):如果i>2:del-odct[k]
,显然,不在一行上,因为这是一个语法错误:请注意,对于python3,此解决方案无法使用n
RuntimeError
,因为在迭代过程中不允许更改字典的大小
。items()
。values()
返回列表(至少在Python 2.7中是这样),因此不需要使用
list()
。在Python 3中有什么不同吗?@John。我选择不让答案复杂化,因为在2.x中返回了列表:这里没有实际影响,而且在任何情况下,每个人现在都应该考虑3.x(即使他们的代码还没有针对它)。值得注意的是,
OrderedDict(list(od.items())[:3])
将返回一行中只有前三项的dict。
for i, k in enumerate(ordered_dict):
    if i > 2:
        del ordered_dict[k]