2013-04-20 4 views
24

Ich habe Schwierigkeiten herauszufinden, was die Syntax für den letzten Schlüssel in einem Python-Wörterbuch wäre. Ich weiß, dass für eine Python-Liste, kann man das sagen zu bezeichnen, die letzte:Last Key in Python Wörterbuch

list[-1] 

Ich weiß auch, dass man eine Liste der Schlüssel eines Wörterbuchs erhalten können wie folgt:

dict.keys() 

jedoch wenn ich die logische folgenden Code zu verwenden versuchen, tut es Arbeit:

dict.keys(-1) 

es heißt, dass die Schlüssel kann nicht alle Argumente nehmen und 1 gegeben ist. Wenn Schlüssel keine Argumente haben können, wie kann ich dann angeben, dass ich den letzten Schlüssel in der Liste haben möchte?

XXXXX Ich gehe davon aus, dass Python-Wörterbücher in der Reihenfolge angeordnet sind, in der Elemente zum Wörterbuch mit dem letzten Element zuletzt hinzugefügt werden. Aus diesem Grund möchte ich auf den letzten Schlüssel im Dictionary zugreifen. 0XXXXX

Mir wurde jetzt gesagt, dass die Dictionary Keys nicht in der Reihenfolge basierend auf, wenn sie hinzugefügt wurden. Wie könnte ich dann den zuletzt hinzugefügten Schlüssel auswählen?

+3

Es als „letzter“ Schlüssel in einem Wörterbuch nicht so etwas ist nicht mehr als ein „erster“ Schlüssel. – kindall

+0

Warum willst du den letzten Schlüssel? Python-Wörterbücher sind nicht geordnet. –

+0

'list (-1)' ist nicht, wie Sie das letzte Element in einer Liste bekommen ... Das wird Ihnen einen Fehler geben (Sie versuchen, eine Liste aufzurufen). Ich denke du meintest "liste [-1]". –

Antwort

24

Wenn Angelegenheiten Auftrag, einen Blick auf 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

Ich bekomme 'TypeError: 'odict_keys' Objekt unterstützt nicht die Indizierung' beim Ausführen von 'od.keys() [- 1]'. Verwenden von Python 3.6.1. –

+1

für 'python 3' benutzen' list (od.keys()) [- 1] ' –

19

Es scheint, wie Sie das tun wollen:

dict.keys()[-1] 

dict.keys() eine Liste Ihrer Wörterbuch der Schlüssel zurückgibt. Sobald Sie die Liste erhalten haben, können Sie mit dem Index -1 das letzte Element einer Liste abrufen.

Da ein Wörterbuch nicht geordnet ist, macht es keinen Sinn, den letzten Schlüssel Ihres Wörterbuchs zu erhalten.

Vielleicht möchten Sie sie vorher sortieren. Es würde so aussehen, dass:

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

Nur ein Kommentar zu dict.keys() [- 1] Dies funktioniert in Python 2.7 *, aber nicht in Python 3. Python 3 wird Fehler: TypeError: 'dict_keys' Objekt unterstützt keine Indizierung – continuousqa

+0

In Python3 funktionierte es für mich mit : 'list (dict.keys()) [- 1]' – abe

16

Es macht keinen Sinn für den „letzten“ Schlüssel in einem Wörterbuch fragen machen, weil Wörterbuch Schlüssel ungeordnete sind. Sie können die Liste der Schlüssel erhalten und die letzte bekommen, wenn Sie möchten, aber das ist in keiner Weise der "letzte Schlüssel in einem Wörterbuch".

+0

Nun, das Wörterbuch wird automatisch in der Reihenfolge sein, in der es bearbeitet wird. Um auf den letzten Schlüssel zuzugreifen, muss ich auf den letzten zugreifen zuletzt hinzugefügt. – cbbcbail

+7

@cbbcbail - nein, nein, nein ... – root

+11

Nein, absolut nicht! Das Wörterbuch ist ** nicht ** die Reihenfolge, in der Sie es bearbeitet haben. Es ist eine * beliebige * Reihenfolge, abhängig vom Hash-Wert des Schlüssels. –

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

Ansonsten ist die keys nur ungeordnete Liste und letzte hat keine Bedeutung und kann auf verschiedenen Python-Versionen unterschiedlich sein.

+0

Nur schade, dass er die "Zeichenfolge" nicht unterstützt –

2

Es gibt absolut sehr guten Grund, den letzten Schlüssel einen OrderedDict zu wollen. Ich verwende ein geordnetes Diktat, um meine Benutzer aufzulisten, wenn ich sie bearbeite. Ich verwende AJAX-Aufrufe, um Benutzerberechtigungen zu aktualisieren und neue Benutzer hinzuzufügen. Da der AJAX ausgelöst wird, wenn eine Berechtigung aktiviert ist, möchte ich, dass mein neuer Benutzer an der gleichen Position in der angezeigten Liste (zuletzt) ​​bleibt, bis ich die Seite neu lade. Bei jeder Ausführung des Skripts wird das Benutzerwörterbuch neu angeordnet.

Das ist alles gut, warum brauchen Sie den letzten Eintrag?Wenn ich Komponententests für meine Software schreibe, möchte ich bestätigen, dass der Benutzer in der letzten Position bleibt, bis die Seite neu geladen wird.

dict.keys()[-1] 

Führt diese Funktion perfekt aus (Python 2.7).

0

ja gibt es: len(data)-1.

für das erste Element Es ist: 0

Verwandte Themen