Ich bin ein großer Fan von Wörterbüchern zum Formatieren von Zeichenfolgen. Es hilft mir, das von mir verwendete Zeichenfolgenformat zu lesen und vorhandene Wörterbücher zu nutzen. Beispielsweise:
class MyClass:
def __init__(self):
self.title = 'Title'
a = MyClass()
print 'The title is %(title)s' % a.__dict__
path = '/path/to/a/file'
print 'You put your file here: %(path)s' % locals()
Ich kann jedoch die Python 3.x-Syntax nicht herausfinden, um dasselbe zu tun (oder ob dies überhaupt möglich ist). Ich möchte Folgendes tun
# Fails, KeyError 'latitude'
geopoint = {'latitude':41.123,'longitude':71.091}
print '{latitude} {longitude}'.format(geopoint)
# Succeeds
print '{latitude} {longitude}'.format(latitude=41.123,longitude=71.091)
python
string
dictionary
python-3.x
Doran
quelle
quelle
Ist das gut für dich
quelle
format_map
. Ähnlich wiestr.format(**mapping)
, nur dass diesmapping
direkt verwendet und nicht in a kopiert wirddict
. Dies ist nützlich, wenn es sich beispielsweisemapping
um eine Diktat-Unterklasse handeltprint(**geopoint)
ist dasselbe wieprint(longitude=71.091, latitude=41.123)
. In vielen Sprachen wird es als Splat-Operator bezeichnet . In JavaScript heißt es Spread-Operator . In Python wird diesem Operator kein bestimmter Name zugewiesen.Verwenden Sie zum Entpacken eines Wörterbuchs in Schlüsselwortargumente
**
. Außerdem unterstützt die Formatierung im neuen Stil das Verweisen auf Attribute von Objekten und Elementen von Zuordnungen:quelle
'{0[latitude]} {1[latitude]} {0[longitude]} {1[longitude]}'.format(geopoint0, geopoint1)
defaultdict
und nicht alle Schlüssel habenDa Python 3.0 und 3.1 EOL'ed sind und niemand sie verwendet, können und sollten Sie verwenden
str.format_map(mapping)
(Python 3.2+) verwenden:Dies bedeutet, dass Sie zum Beispiel a verwenden können
defaultdict
, das einen Standardwert für fehlende Schlüssel festlegt (und zurückgibt):Auch wenn das bereitgestellte Mapping a ist
dict
eine Unterklasse und keine Unterklasse ist, wäre dies wahrscheinlich immer noch etwas schneller.Der Unterschied ist jedoch nicht groß
dann
ist etwa 10 ns (2%) schneller als
auf meinem Python 3.4.3. Der Unterschied wäre wahrscheinlich größer, wenn mehr Schlüssel im Wörterbuch enthalten sind, und
Beachten Sie, dass die Formatsprache jedoch viel flexibler ist. sie können indiziert Ausdrücke enthalten, Attributzugriffe und so weiter, so dass Sie können ein ganzes Objekt zu formatieren, oder 2 von ihnen:
Ab 3.6 können Sie auch die interpolierten Zeichenfolgen verwenden:
Sie müssen nur daran denken, die anderen Anführungszeichen in den verschachtelten Anführungszeichen zu verwenden. Ein weiterer Vorteil dieses Ansatzes ist, dass er viel schneller ist als das Aufrufen einer Formatierungsmethode.
quelle
format
? (Da es nicht in ein Diktat kopiert wird)'%(latitude)s %(longitude)s'%geopoint
;)quelle
Die Python 2-Syntax funktioniert auch in Python 3:
quelle
f""
oder"".format()
;)quelle
print('%(latitude)s %(longitude)s'%geopoint)
das ist auch deutlich schneller als das andere 2'%(geopoint["latitude"])s %(geopoint["longitude"])s'%{"geopoint":geopoint}
Die meisten Antworten formatierten nur die Werte des Diktats.
Wenn Sie den Schlüssel auch in die Zeichenfolge formatieren möchten, können Sie dict.items () verwenden :
Ausgabe:
Wenn Sie arbitry formatieren möchten, dh die Schlüsselwerte wie Tupel nicht anzeigen:
Ausgabe:
quelle
geopoint.items()
;)