如果我有一本字典并且它已经排序了,我想从索引中删除前三项(按值排序)(无论初始字典的内容是什么) ), 我该怎么办?我该怎么做呢? 我希望它能让我切片(比如一个列表),但我已经意识到这是不可能的。
编辑:按指数我的意思是指数。因此,例如,我是否从下面排序的字典中删除1到3的项目,在按值排序之后,那么我只会留下" eggs"。 编辑2:如何在那些地方找到键(在索引0,1,2中)? 编辑3:我不允许导入或打印。
例如:
>>>food = {"ham":12, "cookie":5, "eggs":16, "steak":2}
>>>remove_3(food)
{"eggs":16}
答案 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