2013-04-20 24 views
24

Python辞書の最後のキーの構文がわかりません。私は、Pythonのリストについては、1を意味するためにこれを言うかもしれないことを知っている最後:Python辞書の最後のキー

list[-1] 

私はまた次のように1は、辞書のキーのリストを得ることができることを知っている:しかし

dict.keys() 

私は論理的な次のコードを使用しようとすると、それは仕事をdoesntの:

dict.keys(-1) 

それはキーは任意の引数を取るカントと1が与えられていると述べています。キーがargsを取ることができない場合、リストの最後のキーが必要であることをどのように示すことができますか?

XXXXX 私は、Python辞書が、最新の項目が最後にある辞書に項目が追加された順番に並べられていると仮定して動作しています。このため、辞書の最後のキーにアクセスしたいと考えています.XXXXX

辞書キーが追加された時点で順番に並べられていないと言われました。どのように私は最近追加されたキーを選択することができますか?

+3

辞書で「最後の」キー「最初」の鍵があるよりも、それ以上のようなものはありません。 – kindall

+0

なぜ最後のキーが必要ですか? Python辞書は発注されていません。 –

+0

'list(-1)'はリストの最後の要素の取得方法ではありません。これはエラーを出します(リストを呼び出そうとしています)。あなたは 'list [-1]'を意味すると思います。 –

答えて

24

collections.OrderedDictを見てみましょう:

An OrderedDict is a dict that remembers the order that keys were first inserted. If a new entry overwrites an existing entry, the original insertion position is left unchanged. Deleting an entry and reinserting it will move it to the end.


In [1]: from collections import OrderedDict 

In [2]: od = OrderedDict(zip('bar','foo')) 

In [3]: od 
Out[3]: OrderedDict([('b', 'f'), ('a', 'o'), ('r', 'o')]) 

In [4]: od.keys()[-1] 
Out[4]: 'r' 

In [5]: od.popitem() # also removes the last item 
Out[5]: ('r', 'o') 
+1

'TypeError:' od.keys()[ - 1] 'を実行しているときに 'odict_keys'オブジェクトがインデックス作成をサポートしていません。 Python 3.6.1を使用する。 'python 3'のための –

+1

は' list(od.keys())[ - 1] 'を使います。 –

19

あなたがそれをやりたいように思える:

dict.keys()[-1] 

辞書のキーのリストを返しますdict.keys()。リストを取得すると、-1インデックスを使用してリストの最後の要素を取得できます。

辞書は順序がないので、辞書の最後のキーを取得するのは意味がありません。

おそらく以前にそれらを並べ替える必要があります。それはそのようになります。

sorted(dict.keys())[-1] 
+2

dict.keys()[ - 1]のコメントPython 2.7では動作しますが、Python 3では動作しません。Python 3ではエラーが発生します:TypeError: 'dict_keys'オブジェクトはインデックス処理をサポートしていません – continuousqa

+0

Python3では、 :list(dict.keys())[ - 1] ' – abe

16

それは、辞書のキーは順不同あるので、辞書で「最後」キーを求めるために意味がありません。あなたが好きなら、あなたは鍵のリストを手に入れて最後の鍵を得ることができますが、それは意味をなさない "辞書の最後の鍵"です。

+0

辞書は自動的にそれが編集された順番になるので、最新のキーにアクセスするには、最後のものにアクセスする必要があります。最近追加されました。 – cbbcbail

+7

@cbbcbail - いいえ、いいえ、いいえ... – root

+11

いいえ、絶対にありません!辞書は**あなたがそれを編集した順序ではありません**です。これは、キーのハッシュ値に応じて、*任意の*順です。 –

4
sorted(dict.keys())[-1] 

そうでない場合keysはちょうど順不同リストであり、最後の一つは意味を持たず、様々なPythonのバージョンで異なる場合があります。挿入順序が重要であれば

+0

"string"をサポートしていないのは残念です –

2

OrderedDictの最後のキーが欲しいために絶対に非常に良い理由があります。私は注文した辞書を使ってユーザを編集します。私は、AJAX呼び出しを使用してユーザー権限を更新し、新しいユーザーを追加しています。アクセス許可がチェックされるとAJAXが起動するので、ページをリロードするまで、新しいユーザーを表示されたリストの最後の場所に置いておくと便利です。スクリプトが実行されるたびに、ユーザー辞書が再注文されます。

これはすべて問題ありません。なぜ最後のエントリが必要ですか?そのため、ソフトウェアの単体テストを書くときに、ページがリロードされるまでユーザーが最後の位置にいることを確認したいと思います。

dict.keys()[-1] 

この機能を完全に実行します(Python 2.7)。

0

はいあり:len(data)-1です。第1の要素it'sについては

:0