从字典中删除某个索引的项目?

时间:2016-11-27 19:37:35

标签: python dictionary

如果我有一本字典并且它已经排序了,我想从索引中删除前三项(按值排序)(无论初始字典的内容是什么) ), 我该怎么办?我该怎么做呢? 我希望它能让我切片(比如一个列表),但我已经意识到这是不可能的。

编辑:按指数我的意思是指数。因此,例如,我是否从下面排序的字典中删除1到3的项目,在按值排序之后,那么我只会留下" eggs"。 编辑2:如何在那些地方找到键(在索引0,1,2中)? 编辑3:我不允许导入或打印。

例如:

>>>food = {"ham":12, "cookie":5, "eggs":16, "steak":2}
>>>remove_3(food)
{"eggs":16}

3 个答案:

答案 0 :(得分:1)

获取键值对(.items()),按值(item[1])对其进行排序,然后取前3个([:3]):

for key, value in sorted(food.items(), key=lambda item: item[1])[:3]:
    del food[key]

答案 1 :(得分:0)

尝试以下方法:

import operator
from collections import OrderedDict


food = {"ham": 12, "cookie": 5, "eggs": 16, "steak": 2}
ordered_dict = OrderedDict(sorted(food.items(), key=operator.itemgetter(1)))

for key in list(ordered_dict)[:3]:
    del ordered_dict[key]

<强>输出:

>>> ordered_dict
OrderedDict([('eggs', 16)])

答案 2 :(得分:0)

首先,关于你的陈述:

  

如果我有一本字典并且已经排序了

Python中的

dict本质上不是有序的。因此,您无法保留订单。如果您要使用排序顺序创建dict,请使用collections.OrderedDict()。例如:

>>> from collections import OrderedDict
>>> from operator import itemgetter

>>> food = {"ham":12, "cookie":5, "eggs":16, "steak":2}

>>> my_ordered_dict = OrderedDict(sorted(food.items(), key=itemgetter(1)))

my_ordered_dict保留的值为:

>>> my_ordered_dict
OrderedDict([('steak', 2), ('cookie', 5), ('ham', 12), ('eggs', 16)])

相当于保留订单的dict

{
    'steak': 2, 
    'cookie': 5, 
    'ham': 12, 
    'eggs': 16
}

为了转换包含前3值的dict排除项,您必须对项进行切片(dict.items()返回(key, value)形式的元组列表:

>>> dict(my_ordered_dict.items()[3:])  # OR, OrderedDict(my_ordered_dict.items()[3:])
{'eggs': 16}                           # for maintaining the order
相关问题