Как напечатать пары ключ-значение из dict в виде выровненной таблицы? - PullRequest
0 голосов
/ 07 февраля 2019
Student_Name = {"Mathematics": 90, 
                "Computer Science": 100, 
                "Chemistry": 90, 
                "Physics": 97, 
                "English": 95}
for key,value in Student_Name.items():
    print(key,value)

Я хочу напечатать как:

Mathematics        90
Computer Science   100
Chemistry          90 

и так далее, но печатает вот так

Mathematics 90
Computer Science 100
Chemistry 90
Physics 97
English 95

Я хочу напечатать метки и объекты в правильной строке.

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

У вас есть несколько вариантов:

Взяв свой оригинальный код, вы можете просто добавить следующий элемент:

for key, value in Student_Name.items():
    print(key,'\t',value)

Хотя это не будет идеально, так каки если все клавиши не имеют одинаковую длину, они не будут выглядеть так, как вы хотели.

Вывод:

Mathematics      90
Computer Science         100
Chemistry        90
Physics          97
English          95

Лучшим решением может быть:

for key, value in Student_Name.items():
    print(f'{key:20}{value}')

output:

Mathematics         90
Computer Science    100
Chemistry           90
Physics             97
English             95

Требуется Python 3.6

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

В равной степени подходящим будет 1-й ответ здесь

for key,value in Student_Name.items():
...     print("{0:20}{1:5d}".format(key,value))

, который выдает то же самое, что и f ', но у обоих есть проблема, что еслитема key намного длиннее других, внешний вид нужно будет изменить.Поможет смена ключа {key:20} или {0:20} на большее число, но, возможно, вы можете посчитать, проверьте длину ваших клавиш, используя самое длинное в качестве значения, плюс 5 для заполнения. Например,

вы могли бы сделатьэто (добавлено в дополнительной клавише для иллюстрации:

 Student_Name = {"Mathematics": 90, "Computer Science": 100, "Chemistry": 90, "Physics": 97, "English": 95, "REALLY LONG SUBJECT ABOUT POLITICS": 10}
 # Get the longest subject name
 length = max(len(x) for x in Student_Name)
 # decide on padding
 padding = 5

 #use these two value to working out the exact space required
 space = length + padding

 #format and print the statement
 for key, value in Student_Name.items():
 ...     subject = "{0:{space}}".format(key, space=space)
 ...     result = "{0:5d}".format(value)
 ...     print(subject + result)

Вывод:

Mathematics                           90
Computer Science                     100
Chemistry                             90
Physics                               97
English                               95
REALLY LONG SUBJECT ABOUT POLITICS    10

Результат всегда будет находиться на правильном расстоянии от самого длинного имени субъекта.

0 голосов
/ 07 февраля 2019

Чтобы избежать жестко заданной ширины первого столбца, как в других ответах, вы можете заранее рассчитать максимальную длину ключа.

Простой пример:

grades = {"Mathematics": 90, 
          "Computer Science": 100, 
          "Chemistry": 90, 
          "Physics": 97, 
          "English": 95}
max_key_len = max(map(len, grades.keys()))
format_string = '{{key:{}}}  {{value}}'.format(max_key_len)
for key, value in grades.items():
    print(format_string.format(key=key, value=value))

напечатает:

Mathematics       90
Computer Science  100
Chemistry         90
Physics           97
English           95

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

from typing import Dict, Iterator


def to_aligned_records(dict_: Dict,
                       *,
                       sep: str = ' ') -> Iterator[str]:
    """Yields key-value pairs as strings that will be aligned when printed"""
    max_key_len = max(map(len, dict_.keys()))
    format_string = '{{key:{max_len}}}{sep}{{value}}'.format(max_len=max_key_len, sep=sep)
    for key, value in dict_.items():
        yield format_string.format(key=key, value=value)

И используйте это так:

>>> print(*to_aligned_records(grades), sep='\n')
Mathematics      90
Computer Science 100
Chemistry        90
Physics          97
English          95

>>> print(*to_aligned_records(grades, sep=' '*4), sep='\n')
Mathematics         90
Computer Science    100
Chemistry           90
Physics             97
English             95

>>> print(*to_aligned_records(grades, sep='\t'), sep='\n')
Mathematics         90
Computer Science    100
Chemistry           90
Physics             97
English             95
0 голосов
/ 07 февраля 2019

Попробуйте:

>>> for key,value in Student_Name.items():
...     print("{0:20}{1:5d}".format(key,value))

Начиная с Python 3.6, вы также можете использовать это.(Предоставлено Jon Clements)

for key,value in Student_Name.items():
    print(f'{key:20}{value}')

Для получения дополнительных ссылок посетите эту ссылку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...