Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中对2D字典进行排序_Python_Sorting_Dictionary_2d - Fatal编程技术网

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

在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

Python非常陈旧,我希望按如下方式对2D数组进行排序和打印。使用studentName和studentScore填充2D字典。循环并向字典中添加新项。我添加了一个studentName和studentScore作为示例。我想按studentName对数据集进行排序和打印。。。但不确定怎么做。我们将一如既往地感谢您的帮助

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,也可以只使用元组列表