2017-02-28 3 views
1

Ich bin neu in Python und lesen Sie einfach den folgenden Teil aus Python doc 6.1.3. Format String Syntax:was sind gültige Schlüssel nach Python str.format() Dokumentation

Because arg_name is not quote-delimited, it is not possible to specify arbitrary dictionary keys (e.g., the strings '10' or ':-]') within a format string.

Was bedeutet das? Kann mir jemand Beispiele geben? Bedeutet dies, dass alle Zahlen in einer Formatzeichenfolge Positionsargumente sind? Also ist "10" das 10. Argument? Für ': -]', ist das so, weil es ']' hat?

Und ich habe auch diese post gesehen.

Die andere Frage ist vom Post

dictionary = {'key1': 'val1', '1': 'val2'} 

string1 = 'Interpolating {0[key1]}'.format(dictionary) 
print string1 

Warum es nicht {0 [ "key1"]} ist? Der Schlüssel 'key1' ist eine Zeichenkette, aber hier, wenn 'key1' benutzt wird, ist es ein Fehler. Ein normaler dict-Index sollte dictionary ['key1'] sein, nicht dictionary [key1]

Und genau wie @BrenBarn in diesem Beitrag geantwortet hat, kann es funktionieren, wenn Nummer 1 als Schlüssel im Wörterbuch verwendet wird.

dictionary = {'key1': 'val1', 1: 'val2'} 

string2 = 'Interpolating {0[1]}'.format(dictionary) 
print string2 

So bin ich verwirrt darüber, was der gültige index_string in einer Format-Zeichenfolge sind

Danke,

+1

fand ich dieses eine wertvolle Ressource sein: https://pyformat.info/#getitem_and_getattr – LJGibbs

+0

«Explicit ist besser als implizit.» Ich halte das Extrahieren, was Werte muss außerhalb des Formatstrings formatiert werden, es sei denn, es offensichtlich tot ist. – 9000

Antwort

0

Ich glaube, ich kenne die Antwort nach dem Lesen und mehr zu denken. Dank @decimus phostle in diesem post, die die PEP erwähnt. Es gibt eine fast gleiche Aussage, die schließlich meine Frage beantwortet:

Because **keys** are not quote-delimited, it is not possible to 
specify arbitrary dictionary keys (e.g., the strings "10" or 
":-]") from within a format string. 

Der Unterschied ist, dass es Schlüssel nicht arg_name im PEP sagt. So bedeutet "nicht durch Zitat abgegrenzt", dass Anführungszeichen gewöhnliche Zeichen in einem Schlüssel sind. Zum Beispiel

{0["1"]} 

In diesem Ersatz Feld ist der Schlüssel drei Zeichen: doppelte Anführungszeichen, 1 und doppelte Anführungszeichen, nicht ein Zeichen 1. So offensichtlich gibt es keine solche dreistelligen Schlüssel im Wörterbuch.

Auch entsprechend der PEP, hat es einfache Regel zu Schlüssel zu finden: Wenn es mit einer Ziffer beginnt, dann ist es eine Zahl; Ansonsten ist es eine Zeichenfolge. Das bedeutet, dass wenn Ihr Wörterbuch einen Schlüssel aus einer Zeichenfolge hat, aber aus einem Ziffernzeichen besteht, zum Beispiel "10", können Sie den Schlüssel im Ersatzfeld nicht angeben. Weil, wenn Sie 10 im Ersatzfeld verwenden, es Nummer 10 ist; Wenn Sie "10" verwenden, wird dies als Zeichenfolge aus vier Zeichen betrachtet, nicht als Zeichenfolge aus zwei Zeichen "1" und "0".

Für ': -]' als Schlüssel, warum ist es nicht möglich? Da die Anführungszeichen keine Begrenzer sind, werden

{0[':-]']} 

die Anführungszeichen werden nicht das innere] zitiert (literal). Es wird also das Matched] von [, das den Index vorzeitig beendet.

Hier ist ein gültiger Schlüssel in einem Ersatz-Bereich zu vergleichen:

dd = {"'10'":'a'}  
print("{0['10']}".format(dd)) 

Um so etwas wie ‚10‘ als Schlüssel im Ersetzungsfeld zu verwenden, müssen Sie das Wörterbuch einen Schlüssel stellen Sie sicher, „‘ genannt hat 10 '".

Verwandte Themen