我正在尝试以表格格式打印嵌套词典。但一直未能做到这一点。该表列出了学生姓名和成绩。我希望它是一个“报告卡”类型的格式,易于阅读。我使用的for循环打印出结果。但它是一列列表形式
这是我当前设置的词典
student = {
"student1": {
"Name": "Eddy",
"Grade": 1,
"Math": 78,
"English": 65,
"Physics": 89,
"Chemistry": 80
},
"student2": {
"Name": "Jim",
"Grade": 2,
"Math": 89,
"English": 65,
"Physics": 87,
"Chemistry": 76
},
"student3": {
"Name": "Jane",
"Grade": 3,
"Math": 87,
"English": 97,
"Physics": 75,
"Chemistry": 64
},
}
这是我当前使用的for循环
for i in student:
for j in student[i]:
print(j + " : " + str(student[i][j]))
print("===========")
我想用表格格式打印出来
Name Grade Math English Physics Chemistry
Eddy 1 78 65 89 80
Jim 2 89 65 87 76
Jane 3 87 97 75 64
我曾尝试使用format()
函数,但无法使其与嵌套字典一起工作
我还尝试使用pandas
并将其转换为pd.DataFrame
,但无法使其工作
首先:
print()
作为默认值,在末尾添加new line
,因此如果要在一行中显示,则必须使用print(..., end="")
我认为你应该学习
string formatting
——见第^{a1页。这样,您可以更好地控制行中的元素,而不是使用空格或\t
它需要一次处理所有元素,而不是使用内部
for
-loop,但这提供了更好的控制,并且需要更简单的代码我使用
items()
获取一个学生的所有值,然后使用val["Name"]
、val["Grade"}
等等。所以我确定我将值按正确的顺序排列我使用
{}
定义元素在字符串中的位置,并使用{:^5}
定义它应该使用具有5个字符的字段(如果文本较短,它将添加空格),并且^
意味着它应该将值放在该字段的中心在
string formatting
中,您可以将{}
与任何其他文本一起使用来取消创建表。例如,您可以在要创建的字段之间放置|
顺便说一句:为了使它更通用,您可以使用list
'Name', 'Grade', 'Math', 'English', 'Physics', 'Chemistry']
来决定显示哪些值。您可能还需要计算列宽度的代码,但这将是更复杂的代码昨天碰巧写了一篇。分享它
这里有一个pandas解决方案,正如您提到的,尝试熊猫失败了。您可以将^{} 与
orient=index
一起使用你得到
对于
markdown
表相关问题 更多 >
编程相关推荐