เนื่องจาก Python 3.0 และ 3.1 เป็น EOL'ed และไม่มีใครใช้คุณสามารถและควรใช้str.format_map(mapping)
(Python 3.2+):
คล้ายกับstr.format(**mapping)
, ยกเว้นการทำแผนที่ที่ใช้โดยตรงและไม่ได้คัดลอกไปยัง dict
สิ่งนี้มีประโยชน์หากตัวอย่างเช่นการจับคู่เป็นdict
คลาสย่อย
สิ่งนี้หมายความว่าคุณสามารถใช้ตัวอย่างเช่นdefaultdict
ที่จะตั้งค่า (และกลับ) ค่าเริ่มต้นสำหรับคีย์ที่หายไป:
>>> from collections import defaultdict
>>> vals = defaultdict(lambda: '<unset>', {'bar': 'baz'})
>>> 'foo is {foo} and bar is {bar}'.format_map(vals)
'foo is <unset> and bar is baz'
แม้ว่าการแมปที่ให้ไว้จะdict
ไม่ใช่คลาสย่อย แต่ก็อาจเร็วกว่านี้เล็กน้อย
ความแตกต่างนั้นไม่ใหญ่มากนัก
>>> d = dict(foo='x', bar='y', baz='z')
แล้วก็
>>> 'foo is {foo}, bar is {bar} and baz is {baz}'.format_map(d)
เร็วกว่าประมาณ 10 ns (2%)
>>> 'foo is {foo}, bar is {bar} and baz is {baz}'.format(**d)
บน Python ของฉัน 3.4.3 ความแตกต่างอาจจะมีขนาดใหญ่ขึ้นเนื่องจากมีปุ่มมากกว่าอยู่ในพจนานุกรมและ
โปรดทราบว่าภาษารูปแบบมีความยืดหยุ่นมากกว่านั้น พวกเขาสามารถมีการแสดงออกดัชนีการเข้าถึงคุณลักษณะและอื่น ๆ เพื่อให้คุณสามารถจัดรูปแบบวัตถุทั้งหมดหรือ 2 ของพวกเขา:
>>> p1 = {'latitude':41.123,'longitude':71.091}
>>> p2 = {'latitude':56.456,'longitude':23.456}
>>> '{0[latitude]} {0[longitude]} - {1[latitude]} {1[longitude]}'.format(p1, p2)
'41.123 71.091 - 56.456 23.456'
เริ่มต้นที่ 3.6 คุณสามารถใช้สตริงที่สอดแทรกเช่นกัน:
>>> f'lat:{p1["latitude"]} lng:{p1["longitude"]}'
'lat:41.123 lng:71.091'
คุณต้องจำไว้ว่าให้ใช้อักขระเครื่องหมายคำพูดอื่นภายในเครื่องหมายคำพูดซ้อน ข้อดีอีกข้อของวิธีนี้ก็คือมันเร็วกว่าการเรียกวิธีการจัดรูปแบบ