2016-02-03 2 views
0

У меня есть dict, который содержит строковые ключи разной длины. Я хочу, чтобы получить следующий результат при печати словаря:Как аккуратно распечатать словарь

'short-key'    value1 
'short-key2    value2 
... 
'little-longer-key'  valueXX 
... 
'very-very-long-keeey' valueXXXX 

До сих пор я делал что-то вроде этого:

for key,value in dict.iteritems(): 
    print key," "*(80-len(key)),value 

ПРОБЛЕМЫ:

  1. Я не» Это нравится. На самом деле это не похоже на pythonic

  2. 80 - обычно достаточно большое количество случайно выбранных. Но иногда это может произойти ключ дольше, поэтому " "*(80-len(key)) бесполезно

ответ

1

Вам придется повторять два раза, чтобы получить длину самого длинного ключа. Смысл списка может сделать это лучше. Мое личное предпочтение только итерация по клавишам словаря, а затем сделать поиск:

padded_width = max(len(x) for x in my_dict.iterkeys()) + 1 
for key in my_dict: 
    print(key.ljust(padded_width) + my_dict[key]) 

Вот любитель версии, которая позволяет больше контроля над прокладкой и использует строки форматирования:

SPACE_BETWEEN_KEYS_AND_VALUES = 1 
MINIMUM_PADDING = 10 
padded_width = max(MINIMUM_PADDING, max(len(x) for x in my_dict.iterkeys()) + SPACE_BETWEEN_KEYS_AND_VALUES) 
for key in my_dict: 
    print("{key: <{width}}{value}".format(key=key, width=padded_width, value=my_dict[key])) 

I думаю, что я предпочитаю конкатенацию строк первого примера лично.

Смежные вопросы