2012-05-08 15 views
9

Jak używać zmiennych do formatowania zmiennych?Łańcuch formatu w python ze zmiennym formatowaniem

cart = {"pinapple": 1, "towel": 4, "lube": 1} 
column_width = max(len(item) for item in items) 
for item, qty in cart.items(): 
    print "{:column_width}: {}".format(item, qty) 

> ValueError: Invalid conversion specification 

lub

(...): 
    print "{:"+str(column_width)+"}: {}".format(item, qty) 

> ValueError: Single '}' encountered in format string 

Co mogę zrobić, choć jest najpierw skonstruować ciąg formatowania, a następnie sformatować go:

(...): 
    formatter = "{:"+str(column_width)+"}: {}" 
    print formatter.format(item, qty) 

> lube : 1 
> towel : 4 
> pinapple: 1 

Wygląda niezgrabny, jednak. Czy nie ma lepszego sposobu radzenia sobie z taką sytuacją?

Odpowiedz

15

Ok, problem rozwiązany już tutaj jest odpowiedź na przyszłość: zmienne mogą być zagnieżdżone, tak to działa perfekcyjnie:

for item, qty in cart.items(): 
    print "{0:{1}} - {2}".format(item, column_width, qty) 
+1

Tak, jest to jeden z powodów, że '.format()' jest preferowane do '%' łańcuchy formatu –

+0

@gnibbler: '% *' działa dobrze – georg

+0

Afaik '%' jest uważane za przestarzałe i zostanie usunięte w przyszłych wersjach Pythona 3, chociaż nie podano jeszcze faktycznego terminu. –

Powiązane problemy