Pyt*_*981 4 python dictionary nested pandas
我正在尝试以表格格式打印嵌套字典。但一直没能做到。该表是学生姓名和学生成绩的列表。我希望它采用易于阅读的“报告卡”类型格式。我正在使用的 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
},
}
Run Code Online (Sandbox Code Playgroud)
这是我当前使用的 for 循环。
for i in student:
for j in student[i]:
print(j + " : " + str(student[i][j]))
print("===========")
Run Code Online (Sandbox Code Playgroud)
我想以表格格式打印出来。
Name Grade Math English Physics Chemistry
Eddy 1 78 65 89 80
Jim 2 89 65 87 76
Jane 3 87 97 75 64
Run Code Online (Sandbox Code Playgroud)
我尝试使用该format()函数,但无法使其与嵌套字典一起使用。
我也尝试使用pandas并转换为 a pd.DataFrame,但无法使其工作。
第一:print()默认添加new line在末尾,所以如果你想在一行中显示,那么你必须使用print(..., end="")
我认为你应该学习string formatting- 请参阅页面pyFormat.info。这样您可以更好地控制行中的元素,然后使用空格或\t。
它需要同时处理所有元素,而不是使用内部for循环,但这提供了更好的控制并且需要更简单的代码。
for stud, val in student.items():
print("{:4} {:^5} {:^4} {:^7} {:^7} {:^9}".format(val["Name"], val["Grade"], val["Math"], val["English"], val["Physics"], val["Chemistry"]))
Run Code Online (Sandbox Code Playgroud)
我曾经items()获取一名学生的所有值,然后使用val["Name"],val["Grade"}等,所以我确信我将值按正确的顺序放置。
我用来{}定义在字符串中放置元素的位置,并使用{:^5}我定义它应该使用具有 5 个字符的字段(如果文本较短,它将添加空格),并且^意味着它应该在此字段中居中值。
Name Grade Math English Physics Chemistry
Eddy 1 78 65 89 80
Jim 2 89 65 87 76
Jane 3 87 97 75 64
Run Code Online (Sandbox Code Playgroud)
您string formatting可以与任何其他文本一起使用{}来装饰表格。例如,您可以|在字段之间放置来创建
+------+-------+------+---------+---------+-----------+
| Name | Grade | Math | English | Physics | Chemistry |
+------+-------+------+---------+---------+-----------+
| Eddy | 1 | 78 | 65 | 89 | 80 |
| Jim | 2 | 89 | 65 | 87 | 76 |
| Jane | 3 | 87 | 97 | 75 | 64 |
+------+-------+------+---------+---------+-----------+
Run Code Online (Sandbox Code Playgroud)
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
},
}
print('Name Grade Math English Physics Chemistry')
for stud, val in student.items():
print("{:4} {:^5} {:^4} {:^7} {:^7} {:^9}".format(val["Name"], val["Grade"], val["Math"], val["English"], val["Physics"], val["Chemistry"]))
print('+------+-------+------+---------+---------+-----------+')
print('| Name | Grade | Math | English | Physics | Chemistry |')
print('+------+-------+------+---------+---------+-----------+')
for stud, val in student.items():
print("| {:4} | {:^5} | {:^4} | {:^7} | {:^7} | {:^9} |".format(val["Name"], val["Grade"], val["Math"], val["English"], val["Physics"], val["Chemistry"]))
print('+------+-------+------+---------+---------+-----------+')
Run Code Online (Sandbox Code Playgroud)
顺便说一句:为了使其更加通用,您可以使用列表'Name', 'Grade', 'Math', 'English', 'Physics', 'Chemistry']来决定显示哪些值。您可能还需要计算列宽度的代码,但这将是更复杂的代码。
| 归档时间: |
|
| 查看次数: |
4477 次 |
| 最近记录: |