在Python中对2D字典进行排序
Python非常陈旧,我希望按如下方式对2D数组进行排序和打印。使用studentName和studentScore填充2D字典。循环并向字典中添加新项。我添加了一个studentName和studentScore作为示例。我想按studentName对数据集进行排序和打印。。。但不确定怎么做。我们将一如既往地感谢您的帮助在Python中对2D字典进行排序,python,sorting,dictionary,2d,Python,Sorting,Dictionary,2d,Python非常陈旧,我希望按如下方式对2D数组进行排序和打印。使用studentName和studentScore填充2D字典。循环并向字典中添加新项。我添加了一个studentName和studentScore作为示例。我想按studentName对数据集进行排序和打印。。。但不确定怎么做。我们将一如既往地感谢您的帮助 dataSet = {} position = len(dataSet) studentName = "Derek" studentScore = "80%" dataSet
dataSet = {}
position = len(dataSet)
studentName = "Derek"
studentScore = "80%"
dataSet.update({position : {"studentName": studentName, "Score": studentScore }})
我希望输出是类似于
Student: Derek -- Score: 80%
自然地,循环遍历数据集中的每个项
目前正在使用此。。。但是被格式化为对象,非常难看
def viewScores(dataSet):
for x in dataSet:
for y in dataSet[x]:
print (y,':',dataSet[x][y])
首先,您应该使用字典获取值 然后,您可以轻松地访问每个项目的
studentName
和studentScore
。我曾经
最后,使用对值进行排序
您应该回顾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)
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):
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)
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%
你能说得清楚一点吗?你能给出输入和输出的样本吗?你能查到许多相关的问题-答案已经在那里了。那么它应该以什么方式排序?举一个例子,其中有一个以上的数据it@VigneshKalai如前所述,我想按学生姓名排序,字典中刚好只有一项…“位置”不是很有帮助:它总是将新的dict映射到固定的键。不需要列表理解,您可以只迭代键。@OBu我不能只迭代键,因为键是整数,对应的值是字典。这就是为什么我使用列表理解。。。我不明白为什么应该投否决票。@OBu你能更具体地解释一下错在哪里吗?我想说问题不在你的答案中,而是在问题中:按照他使用字典的方式,他只有一把钥匙——这是毫无意义的。如果删除不需要的dict,只需迭代键即可。他在事后澄清说,他想要一个id,但这会导致不同的数据结构。在你的例子中,你可以只写“对于学生,按排序得分(valuesDict,key=lambda k:k['studentName']),而忽略第一个列表理解。我真的很不信任。谢谢你,奥布。我看到的唯一问题是两个“学生”同名?那么“学生”对字典来说是个坏键。您可以引入一个id,也可以只使用元组列表