在Python中排序2D字典

2024-05-20 10:10:32 发布

您现在位置:Python中文网/ 问答频道 /正文

Python非常生疏,我希望排序并打印一个2D数组,如下所示。用studentName和studentScore填充2D字典。循环并向字典中添加新项。我添加了studentName和studentScore作为示例。我想按studentName排序并打印数据集。。。但不确定怎么做。任何帮助我们都会一如既往的感激。。。在

dataSet = {}
position = len(dataSet)
studentName = "Derek"
studentScore = "80%"
dataSet.update({position : {"studentName": studentName, "Score": studentScore }})

我希望输出是类似。。。在

^{pr2}$

当然,循环访问数据集中的每个项

当前正在使用此。。。但是被格式化为对象,而且非常难看!在

def viewScores(dataSet):
 for x in dataSet:
    for y in dataSet[x]:
        print (y,':',dataSet[x][y])

Tags: 数据in示例forlen字典排序derek
3条回答

这是另一种可能的解决方案,它按名称排序,然后打分。正如建议的那样,将分数存储为整数会更合理,因为这样会使排序更容易一些。在

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)

对于本例,它将显示以下输出:

^{pr2}$

你应该回顾一下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)

此外,我建议将分数存储为数字而不是字符串,并且只在打印阶段添加百分号。在

有了你的新要求(重名),我会这样解决:

^{pr2}$

首先,应该使用^{}获取字典的值。在

然后,您可以轻松地访问studentName和{}。我用了list comprehension

最后,使用^{}对值进行排序。在

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)

相关问题 更多 >