Ich bemühe mich, Python zu lernen, und achte genau auf gängige Codierungsstandards. Dies mag wie eine sinnlose, wählerische Frage erscheinen, aber ich versuche, mich beim Lernen auf Best Practices zu konzentrieren, damit ich keine „schlechten“ Gewohnheiten verlernen muss.
Ich sehe zwei gängige Methoden zum Initialisieren eines Diktats:
a = {
'a': 'value',
'another': 'value',
}
b = dict(
a='value',
another='value',
)
Was gilt als "pythonischer"? Welches benutzt du? Warum?
python
dictionary
daotoad
quelle
quelle
{}
ziemlich einheitlich verwendet, aber ich sehe einen Großteil des explizitendict()
Ansatzes an anderer Stelle. Ich konnte den Vorteil einer expliziten Syntax erkennen, aber das Fehlen des Ansatzes in den offiziellen Dokumenten machte mich misstrauisch. Nachdem ich dies gepostet hatte, suchte ich in den Bibliotheksdokumenten nachdict
der Warnung, dass Schlüssel gültige Bezeichner sein müssen, wenn ein explizitesdict
Diktat zum Initialisieren eines Diktats verwendet wird.dict()
wird geschriebendict
- es wird der Name des Typs verwendet. Die geschweiften Klammern ({}
) basieren auf Interpunktion, um den Typ zu identifizieren.Antworten:
Geschweifte Klammern. Das Übergeben von Schlüsselwortargumenten an
dict()
kann eine Karte nur initialisieren, wenn die Schlüssel gültige Python-Bezeichner sind, obwohl dies in vielen Szenarien sehr gut funktioniert.Das funktioniert:
Das wird nicht funktionieren:
quelle
Die ersten geschweiften Klammern. Andernfalls treten Konsistenzprobleme mit Schlüsseln auf, die ungerade Zeichen enthalten, z
=
.quelle
Die erste Version ist vorzuziehen:
{1: 'one', 2: 'two'}
. Die zweite Variante funktioniert nur für (einige) Zeichenfolgenschlüssel. Die Verwendung unterschiedlicher Syntaxarten je nach Schlüsseltyp wäre eine unnötige Inkonsistenz.Es ist schneller:
quelle
Ich denke, die erste Option ist besser, weil Sie auf die Werte als ['a'] oder ['other'] zugreifen werden. Die Schlüssel in Ihrem Wörterbuch sind Zeichenfolgen, und es gibt keinen Grund, so zu tun, als ob dies nicht der Fall wäre. Für mich sieht die Schlüsselwortsyntax zunächst klug aus, auf den zweiten Blick jedoch dunkel. Dies ist für mich nur dann sinnvoll, wenn Sie damit arbeiten
__dict__
und die Schlüsselwörter später zu Attributen werden.quelle
Zu Ihrer Information: Wenn Sie Ihrem Wörterbuch Attribute hinzufügen müssen (Dinge, die an das Wörterbuch angehängt sind, aber nicht zu den Schlüsseln gehören), benötigen Sie das zweite Formular. In diesem Fall können Sie Ihr Wörterbuch wie folgt mit Schlüsseln mit beliebigen Zeichen initialisieren:
quelle
Manchmal
dict()
ist eine gute Wahl:[random.randint (0,100) für x im Bereich (0,7)]))
quelle
Ich benutze fast immer geschweifte Klammern; In einigen Fällen, in denen ich Tests schreibe, verwende ich jedoch das Packen / Entpacken von Schlüsselwörtern. In diesen Fällen ist dict () viel wartbarer, da ich nichts ändern muss:
zu:
Es hilft auch unter bestimmten Umständen, wenn ich denke, dass ich es zu einem späteren Zeitpunkt in ein benanntes Tupel oder eine Klasseninstanz verwandeln möchte.
In der Implementierung selbst werde ich aufgrund meiner Besessenheit von der Optimierung und wenn ich keinen besonders großen Vorteil für die Wartbarkeit sehe, immer geschweifte Klammern bevorzugen.
In Tests und bei der Implementierung würde ich nie dict () verwenden, wenn die Möglichkeit besteht, dass die Schlüssel dann oder in Zukunft hinzugefügt werden:
dict(1foo=2)
löst einen SyntaxError aus)quelle