[英]Sorting 2D Dictionaries In Python
使用Python非常生锈,我希望按如下所示对2D数组进行排序和打印。 使用StudentName和studentScore填充2D词典。 循环并向字典添加新项目。 我添加了一个studentName和studentScore作为示例。 我想按StudentName排序和打印dataSet ...但不确定如何。 一如既往地感谢您的任何帮助...
dataSet = {}
position = len(dataSet)
studentName = "Derek"
studentScore = "80%"
dataSet.update({position : {"studentName": studentName, "Score": studentScore }})
我希望输出为...
Student: Derek -- Score: 80%
当然,循环遍历dataSet中的每个项目
当前正在使用它...但是被格式化为对象并且非常难看!
def viewScores(dataSet):
for x in dataSet:
for y in dataSet[x]:
print (y,':',dataSet[x][y])
您应该查看python中字典的用法...可以这样解决问题:
def viewScores(dataSet):
for student in sorted(dataSet.keys()):
print ("{}: {}".format(student, dataSet[student]))
dataSet = {}
studentName = "Derek"
studentScore = "80%"
dataSet[studentName] = studentScore
dataSet["Zyline"] = "99%"
print(dataSet) # just to show it works (and it might be sorted in reverse order)
viewScores(dataSet)
此外,我建议将分数存储为数字而不是字符串,并仅将百分比signn添加到打印区中。
有了您的新要求(重复的名称),我可以这样解决:
def viewScores(dataSet):
for student in sorted(dataSet, key=lambda x: x["studentName"]):
print ("Student: {} -- Score {}%".format(student["studentName"], student["studentScore"]))
dataSet = []
studentID = 7
studentName = "Derek"
studentScore = 80
dataSet.append({"studentName": studentName, "studentScore": studentScore, "id": studentID})
dataSet.append({"studentName": "Zyline", "studentScore": 99, "id": 42})
print(dataSet) # just to show it works (and it might be sorted in reverse order)
viewScores(dataSet)
这是另一种可能的解决方案,它按名称排序然后得分。 如建议的那样,将分数存储为整数会更有意义,因为这样会使排序更容易。
def viewScores(dataSet):
entries = sorted([(dataSet[entry]['studentName'], dataSet[entry]['Score']) for entry in dataSet])
for name, score in entries:
print('Student: {} -- Score: {}%'.format(name, score))
dataSet = {}
position = len(dataSet)
studentName = "Derek"
studentScore = 80
dataSet.update({position : {"studentName": studentName, "Score": studentScore }})
position = len(dataSet)
studentName = "Andrew"
studentScore = 90
dataSet.update({position : {"studentName": studentName, "Score": studentScore }})
position = len(dataSet)
studentName = "Andrew"
studentScore = 9
dataSet.update({position : {"studentName": studentName, "Score": studentScore }})
viewScores(dataSet)
对于此示例,它将显示以下输出:
Student: Andrew -- Score: 9%
Student: Andrew -- Score: 90%
Student: Derek -- Score: 80%
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.