2016-11-27 78 views
-1

如果我有一本字典並對它進行排序,並且我想通過索引(不管最初字典的內容是什麼)從它中刪除前三個項目(按值的順序),我該怎麼做?我會怎麼做呢? 我希望它能讓我分片(比如一個列表),但我已經意識到這是不可能的。從字典中刪除某個索引的項目?

編輯:按指數我的意思是指數。舉例來說,如果我按照下面的排序字典從下面的1到3中刪除項目,按值排序,那麼我只剩下「雞蛋」。 編輯2:如何在那些地方找到鍵(在索引0,1,2)? 編輯3:我不允許在此導入或打印。

例如:

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

你是什麼意思指數?你的意思是按鍵? – ettanany

+0

字典排序順序不穩定(不同Python運行之間的變化)。你想使用OrderedDict,當按鍵添加時按順序提供穩定的排序順序。 –

+6

詞典沒有訂購,因此沒有「前三個」項目。所以你必須找到解決問題的關鍵。 –

回答

1

獲取密鑰值對(.items()),由值(item[1])對它們進行排序,並採取第一3([:3]):

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

@AndyHayden'sorted'將創建一個與字典分開的具體列表。 –

+0

它仍然給我一個錯誤消息:(我該怎麼辦? – Jen

+0

@KarolyHorvath當它應該是O(1)時,如果我們使用的是更好的數據結構,它就是O(n)。 –

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)]) 
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 
} 

爲了轉換dict排除項與前3的值,你必須切片項目(dict.items()返回列表的形式爲(key, value)):

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