2014-12-10 4 views
-1

У меня есть этот словарь (название и сорт):значение печати и ключи от словаря в определенном формате (питон)

d1 = {'a': 1, 'b': 2, 'c': 3} 

и я должен напечатать это следующим образом:

|a   | 1   |  C | 
|b   | 2   |  B | 
|c   | 3   |  A | 

Я создал новый словарь, чтобы узнать букву градуировки на основе этих условий:

d2 = {} 
d2 = d1 
for (key, i) in d2.items(): 
    if i = 1: 
     d2[key] = 'A' 
    elif i = 2: 
     d2[key] = 'B' 
    elif i = 3: 
     d2[key] = 'C' 

При попытке напечатать его с помощью следующий код:

sorted_d = sorted(d) 

format_str = '{:10s} | {:10f} | {:>7.2s} |' 
for name in sorted_d: 
    print(format_str.format(name, d[name])) 

Он печатает:

a   | 1   | 
b   | 2   | 
c   | 3   | 

Как я могу добавить буквенную?

+0

Ваш код класса не точно изменять правильный словарь. Он ссылается на 'd1' (не копируя его). Затем вы изменяете 'dw'. Вы также * инвертировали оценки *; ваш образец вывода '1' должен быть' C', но тогда вы фактически использовали 'A' для' 1'. –

+0

Ваш заявленный результат также не соответствует вашему фактическому коду. –

+0

Вы также сортируете словарь 'd', но ваш * входной словарь * называется' d1'. Можете ли вы, по крайней мере, создать код в своем вопросе, который на самом деле правильно воспроизводит вашу проблему? –

ответ

0

Вашего словарь класса может быть создан как:

grades = {1: 'C', 2: 'B', 3: 'A'} # going by the sample output 

{:>7.2f} бы ожидать числа с плавающей точкой а. Просто используйте s или оставьте тип форматирования и не указывайте точность. Значения словаря являются целыми числами, поэтому я бы использовал формат d для тех, а не f. Вывод вашего образца также отображается в влево, выравнивая эти цифры, а не выравнивание по правому краю, поэтому для спецификатора формата потребуется '<10d'.

Чтобы включить буквы класса, просмотра классов с d[name] в качестве ключа:

format_str = '{:10s} | {:<10d} | {:>10s} |' 
for name in sorted_d: 
    print(format_str.format(name, d[name], grades[d[name]])) 

Демо:

>>> d1 = {'a': 1, 'b': 2, 'c': 3} 
>>> grades = {1: 'C', 2: 'B', 3: 'A'} # going by the sample output 
>>> sorted_d = sorted(d1) 
>>> format_str = '{:10s} | {:<10d} | {:>10s} |' 
>>> for name in sorted_d: 
...  print(format_str.format(name, d1[name], grades[d1[name]])) 
... 
a   | 1   |   C | 
b   | 2   |   B | 
c   | 3   |   A |