86

Python ディクショナリの最後のキーの構文を理解するのに苦労しています。Python リストの場合、最後のリストを示すために次のように言うことができることを知っています。

list[-1]

また、次のように辞書のキーのリストを取得できることも知っています。

dict.keys()

ただし、論理的な次のコードを使用しようとすると、機能しません。

dict.keys(-1)

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

私は、Python 辞書が、最新の項目が最後に辞書に追加された順序で並べられているという前提で操作しています。このため、辞書の最後のキーにアクセスしたいと考えています。

辞書のキーが追加された時期に基づいて順序付けされていないことがわかりました。では、最近追加されたキーをどのように選択できますか?

4

12 に答える 12

87

あなたはそれをしたいようです:

dict.keys()[-1]

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

辞書は順不同*であるため、辞書の最後のキーを取得しても意味がありません。

おそらく、それらを前に並べ替えたいと思うでしょう。次のようになります。

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

ノート:

Python 3 では、コードは次のとおりです。

list(dict)[-1]

*アップデート:

これはもはや当てはまりません。ディクショナリ キーは、Python 3.7 で公式に並べ替えられました (3.6 では非公式に)。

于 2013-04-20T21:11:14.417 に答える
61

挿入順序が重要な場合は、以下をご覧くださいcollections.OrderedDict

OrderedDict は、キーが最初に挿入された順序を記憶する辞書です。新しいエントリが既存のエントリを上書きする場合、元の挿入位置は変更されません。エントリを削除して再挿入すると、最後に移動します。


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

アップデート:

Python 3.7 (3.6 では非公式) の時点で、辞書のキーは挿入順に正式に並べられるため、 OrderedDict は不要になりました。

これらの最近の Python バージョンでは、代わりにlist(my_dict)[-1]またはを使用できlist(my_dict.keys())[-1]ます。

于 2013-04-20T21:23:27.853 に答える
16

辞書のキーは順不同であるため、辞書の「最後の」キーを要求しても意味がありません。キーのリストを取得し、必要に応じて最後のキーを取得できますが、それは決して「辞書の最後のキー」ではありません。

于 2013-04-20T21:16:34.647 に答える
8

Python 3.7 dict は常に順序付けられているため (順序を挿入)、

python 3.8 以降keys()values()およびitems()dict の戻り値: 次の可能性のあるビューreversed:

最後のキーを取得するには:

next(reversed(my_dict.keys()))  

と に同じことが適用されvalues()ますitems()

PS最初のキーの使用を取得するには: next(iter(my_dict.keys()))

于 2020-07-23T16:42:45.120 に答える
6
sorted(dict.keys())[-1]

それ以外の場合、keysは順序付けられていないリストであり、「最後のもの」は無意味であり、さまざまな python バージョンで異なる場合さえあります。

OrderedDictを調べたいと思うかもしれません。

于 2013-04-20T21:19:33.597 に答える
5

OrderedDict の最後のキーが必要な理由は絶対にあります。ユーザーを編集するときに、順序付き辞書を使用してユーザーをリストします。AJAX 呼び出しを使用してユーザー権限を更新し、新しいユーザーを追加しています。アクセス許可がチェックされると AJAX が起動するため、ページをリロードするまで、新しいユーザーが表示されたリスト (最後) の同じ位置に留まるようにします。スクリプトが実行されるたびに、ユーザー辞書の順序が変更されます。

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

dict.keys()[-1]

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

于 2015-04-07T19:17:07.990 に答える
-4

はい、ありますlen(data)-1

最初の要素の場合: 0

于 2016-10-13T17:16:42.110 に答える