如何将字典的键值对打印为对齐表?

Sil*_*ang 8 python dictionary output

Student_Name = {"Mathematics": 90, 
                "Computer Science": 100, 
                "Chemistry": 90, 
                "Physics": 97, 
                "English": 95}
for key,value in Student_Name.items():
    print(key,value)
Run Code Online (Sandbox Code Playgroud)

我想打印如下:

Student_Name = {"Mathematics": 90, 
                "Computer Science": 100, 
                "Chemistry": 90, 
                "Physics": 97, 
                "English": 95}
for key,value in Student_Name.items():
    print(key,value)
Run Code Online (Sandbox Code Playgroud)

等等,但它是这样打印的

Mathematics        90
Computer Science   100
Chemistry          90 
Run Code Online (Sandbox Code Playgroud)

我想以正确的行打印标记和主题。

App*_*ker 7

您有多种选择:

使用您的原始代码,您可以简单地选择下一项:

for key, value in Student_Name.items():
    print(key,'\t',value)
Run Code Online (Sandbox Code Playgroud)

尽管这并不完美,因为它是一个选项卡,并且除非所有键的长度相似,否则它看起来不会像您预期的那样。

输出:

Mathematics      90
Computer Science         100
Chemistry        90
Physics          97
English          95
Run Code Online (Sandbox Code Playgroud)

更好的解决方案可能是:

for key, value in Student_Name.items():
    print(f'{key:20}{value}')
Run Code Online (Sandbox Code Playgroud)

输出:

Mathematics         90
Computer Science    100
Chemistry           90
Physics             97
English             95
Run Code Online (Sandbox Code Playgroud)

需要Python 3.6

我对你唯一的问题是为什么你想这样做,最好打印一些文件并使用分隔符并稍后担心演示。无论哪种方式,你应该能够做到以上

同样合适的是这里的第一个答案

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

其中 out 与 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)
Run Code Online (Sandbox Code Playgroud)

输出 :

Mathematics                           90
Computer Science                     100
Chemistry                             90
Physics                               97
English                               95
REALLY LONG SUBJECT ABOUT POLITICS    10
Run Code Online (Sandbox Code Playgroud)

始终会使结果与最长的主题名称保持适当的距离。

  • 您还可以执行最长的主题名称长度,例如“length = max(map(len,Student_Name))”。Map 函数对于可迭代中所有元素的操作非常有用。 (2认同)

tau*_*s05 1

尝试这个:

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

从 python 3.6 开始,您也可以使用它。(乔恩·克莱门茨提供)

for key,value in Student_Name.items():
    print(f'{key:20}{value}')
Run Code Online (Sandbox Code Playgroud)

如需其他参考,请访问此链接。