2015-04-15 3 views
3

У меня есть словарь и вы хотите печатать в табличной форме с первым заголовком как «код», а второй как «имя», а затем отсортированным в алфавитном порядке.Как напечатать словарь в табличной форме и в алфавитном порядке?

я есть в данный момент:

import json 
q = my_dict() #which is the dictionary 
d = json.dumps(q) 
print(d) 

выход:

"GEL": "Georgian Lari", 
"BOB": "Bolivian Boliviano", 
"ZAR": "South African Rand", 

Какой неправильный путь круглый, и я не знаю, как вставить столбцы заголовков. Сортировка по алфавитному порядку также мне очень помогла!

Name     Code 
"Bolivian Boliviano" "BOB" 
"Georgian Lari"  "GEL" 
"South African Rand" "Zar" 

Что-то вроде этого то, что им нужно.

+0

... да? Я не уверен, чего вы пытаетесь достичь. Каков ваш * ожидаемый выход? –

+0

Ожидаемый результат добавлен –

ответ

5

Я не уверен, что если вам нужны цитаты, но вы можете распечатать свой словарь в порядке, вы хотите с:

max_len = max([len(v) for v in d.values()]) 
padding = 4 
for k,v in sorted(d.items(), key=lambda i:i[1]): 
    print('{v:{v_len:d}s} {k:3s}'.format(v_len=max_len+padding, 
              v=v, k=k)) 

Выход:

Bolivian Boliviano  BOB 
Georgian Lari   GEL 
South African Rand  ZAR 

key аргумент в sorted обеспечивает проведение что элементы словаря отсортированы по значению.

EDIT: в соответствии с запросом укажите длину поля, соответствующую длине словаря (плюс некоторое заполнение).

+0

Я бы получил этот ответ, если бы у вас был код, который проверял правильные значения длины каждого поля форматирования строк, а не просто его кодировку. Если одно из значений моего первого столбца - «Святое дерьмо, это длинное значение», оно не должно разорвать табуляцию. –

+1

Очень разумный запрос: отредактирован! – xnx

6

Если сторонние модули являются опцией, вы можете использовать tabulate.

Запуск из командной строки:

$ pip install tabulate 

Затем в сценарии

from tabulate import tabulate 

headers = ['Name', 'Code'] 
data = sorted([(v,k) for k,v in d.items()]) # flip the code and name and sort 
print(tabulate(data, headers=headers)) 

Это даст вам выход

Name    Code 
------------------ ------ 
Bolivian Boliviano BOB 
Georgian Lari  GEL 
South African Rand ZAR