staging.inyokaproject.org

Was wird die Ausgabe des folgenden Python-Codes sein

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

kimberly

Anmeldungsdatum:
1. März 2023

Beiträge: 6

Ich habe die folgende Zeile von Python-Code mit einem Wörterbuch,

1
2
3
4
5
6
7
8
9
sample_dict = {
        "name": "Kelly",
        "age": 25,
        "salary": 800,
        "city": "New york"
    }
    keys = ["name", "salary"]
    sample_dict = {k: sample_dict[k] for k in sample_dict.keys() - keys}
    print(sample_dict)

Warum ist die Ausgabe 'Stadt': 'New York', 'Alter': 25 statt 'Alter': 25, 'Stadt': 'New York'?

Was verursacht die Umkehrung der Reihenfolge der Wörterbuchschlüssel? Jede Hilfe wird sehr geschätzt. Der Code wurde auf Spyder mit Python 3.8.5 ausgeführt.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 12527

Würde mich wundern, wenn der Code "Stadt", "Alter" und "New York" ausgibt. Reihenfolge in Dictionaries ist etwas trickreich - ich würde mich eher nicht darauf verlassen.

snafu1

Avatar von snafu1

Anmeldungsdatum:
5. September 2007

Beiträge: 2119

In aktuelleren Python-Versionen behalten Wörterbücher durchaus die Reihenfolge bei, in der die einzelnen Schlüssel hinzugefügt werden. Jedoch gilt das nicht für Sets. Der Teil sample_dict.keys() - keys erzeugt ein solches Set für die übrigbleibenden Schlüssel in der "falschen" Reihenfolge. Das neue Wörterbuch baut darauf auf und hat daher ebenfalls die falsche Reihenfolge.

Um die alte Reihenfolge zu erhalten musst du den Code etwas umschreiben:

1
2
3
4
5
6
7
8
9
sample_dict = {
    "name": "Kelly",
    "age": 25,
    "salary": 800,
    "city": "New york"
}
keys = {"name", "salary"}
new_dict = {k: sample_dict[k] for k in sample_dict if k not in keys}
print(new_dict)

Ich habe für keys ein Set anstatt einer Liste gewählt, weil ein Set performanter ist, wenn man bloß auf das Vorhandensein von Elementen prüfen will.

kimberly

(Themenstarter)

Anmeldungsdatum:
1. März 2023

Beiträge: 6

snafu1 schrieb:

[...]

Vielen Dank

Bearbeitet von rklm:

überflüssiges FQ entfernt

Antworten |