Saya penggemar berat menggunakan kamus untuk memformat string. Ini membantu saya membaca format string yang saya gunakan serta membiarkan saya memanfaatkan kamus yang ada. Sebagai contoh:
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()
Namun saya tidak dapat mengetahui sintaks python 3.x untuk melakukan hal yang sama (atau jika itu bahkan mungkin). Saya ingin melakukan hal berikut
# 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
sumber
sumber
Apakah ini baik untukmu?
sumber
format_map
. Mirip denganstr.format(**mapping)
, kecuali yangmapping
digunakan secara langsung dan tidak disalin kedict
. Ini berguna jika misalnyamapping
adalah subclass dictprint(**geopoint)
sama denganprint(longitude=71.091, latitude=41.123)
. Dalam banyak bahasa, ini dikenal sebagai operator percikan . Dalam JavaScript, itu disebut operator spread . Dalam python, tidak ada nama khusus yang diberikan kepada operator ini.Untuk membongkar kamus ke argumen kata kunci, gunakan
**
. Juga ,, dukungan pemformatan gaya baru yang mengacu pada atribut objek dan item pemetaan:sumber
'{0[latitude]} {1[latitude]} {0[longitude]} {1[longitude]}'.format(geopoint0, geopoint1)
defaultdict
dan tidak memiliki semua kunciKarena Python 3.0 dan 3.1 EOL'ed dan tidak ada yang menggunakannya, Anda dapat dan harus menggunakan
str.format_map(mapping)
(Python 3.2+):Apa artinya ini adalah bahwa Anda dapat menggunakan misalnya a
defaultdict
yang akan menetapkan (dan mengembalikan) nilai default untuk kunci yang hilang:Bahkan jika pemetaan yang disediakan adalah a
dict
, bukan subclass, ini mungkin masih akan sedikit lebih cepat.Perbedaannya tidak besar, mengingat
kemudian
sekitar 10 ns (2%) lebih cepat dari
pada Python 3.4.3 saya. Perbedaannya mungkin akan lebih besar karena lebih banyak kunci dalam kamus, dan
Perhatikan bahwa bahasa format jauh lebih fleksibel daripada itu; mereka dapat berisi ekspresi yang diindeks, akses atribut dan sebagainya, sehingga Anda dapat memformat seluruh objek, atau 2 di antaranya:
Mulai dari 3,6 Anda dapat menggunakan string interpolasi juga:
Anda hanya perlu ingat untuk menggunakan karakter kutipan lain dalam tanda kutip bersarang. Kelebihan lain dari pendekatan ini adalah bahwa itu jauh lebih cepat daripada memanggil metode pemformatan.
sumber
format
? (Mengingat bahwa itu tidak disalin ke dikt)'%(latitude)s %(longitude)s'%geopoint
;)sumber
Sintaks Python 2 juga berfungsi di Python 3:
sumber
f""
atau"".format()
;)sumber
print('%(latitude)s %(longitude)s'%geopoint)
ini juga secara signifikan lebih cepat daripada yang lain 2'%(geopoint["latitude"])s %(geopoint["longitude"])s'%{"geopoint":geopoint}
Sebagian besar jawaban hanya memformat nilai-nilai dikt.
Jika Anda ingin juga memformat kunci menjadi string, Anda dapat menggunakan dict.items () :
Keluaran:
Jika Anda ingin memformat dengan cara arbitrer, artinya, tidak menampilkan nilai kunci seperti tupel:
Keluaran:
sumber
geopoint.items()
;)