2016-11-27 9 views
-1

辞書があり、それがソートされていて、索引で最初の3つの項目(値の順に)を削除したい場合(最初の辞書の内容に関係なく)、私は何をしますか?私はどうしたらいいのですか? 私はそれを私がスライスさせることを望んでいました(リストのようなものなど)が、それは不可能であることを認識しました。特定のインデックスの項目を辞書から削除しますか?

EDIT:インデックスはインデックスを意味します。例えば、以下のソートされた辞書の1から3の項目を削除して、それを値でソートした後、「卵」だけを残します。 EDIT 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

辞書は発注されていないため、「最初の3つの」項目はありません。だから自分を取り除く鍵を見つけなければならない。 –

答えて

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)でなければなりません。 –

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()を使用します。例えば:my_ordered_dictによって

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

値ホールドは次のようになります。dict除くアイテムを変換するために

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

:として注文を維持dictと等価である

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

上位3つの値では、アイテムをスライスする必要があります(dict.items()はタプルのリストを(key, value)の形式で返します):

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