繁体   English   中英

在Python中对2D词典进行排序

[英]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%

首先,您应该使用.values()获得字典的值。

然后,您可以轻松访问每一个的studentNamestudentScore 我用列表理解

最后,使用sorted()对值进行sorted()

valuesDict = dataSet.values()
valuesTuple = [(v["studentName"], v["Score"]) for v in valuesDict]
sortedValues = sorted(valuesTuple)

for student, score in sortedValues:
    print "Student: %s -- Score: %s" % (student, score)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM