按字母顺序排序字典

6

我的程序可以从文件中的字典输出每个学生的姓名和他们的三个分数,但我需要按字母顺序对数据进行排序。如何按姓氏的字母顺序对姓名和分数进行排序?

这是我目前的代码:

import pickle

def clssa():
    filename="friendlist.data"
    f=open('Class6A.txt','rb')
    storedlist = pickle.load(f)
    for key, value in storedlist.items():
        sorted (key), value in storedlist.items()  
        print (("{} --> {}").format(key, value))

姓氏是“key”吗? - enrico.bacis
我看到的所有方法都需要字典的名称:你有字典的名称:storedlist - Martijn Pieters
哦,对不起,我是 Python 新手哈哈,是的,名字和姓氏是关键,例如 SAM WHITE。 - Rutwb2
你能展示一下程序生成的几行输出,这样我们就可以看到字典的内容是什么样子的吗?--好的,你已经回答了。 - mkrieger1
我不同意这是一个重复的问题。该问题要求按姓氏对数据进行排序,这既没有在链接的问题中得到解决,也没有在大多数答案中得到解决。 - mkrieger1
3个回答

14

2
字典是无序的,因此您需要对键进行排序,然后访问字典:
for key in sorted(storedlist.iterkeys()):
    print (("{} --> {}").format(key, storedlist[key]))

你可以通过使用'for key, value in sorted(storedlist.interitems())'来使它更简单。 - Sorin
1
从 Python 3.6+ 开始,字典是有序的。 - QuantumChris

0
为了按学生的姓氏排序,您首先需要从用作字典键的全名中提取出姓氏。以下函数应该能够完成这个任务:
def get_surname(full_name):
    return full_name.split()[-1]

然后您可以像这样迭代字典内容:
for name in sorted(storedlist, key=get_surname):
    print("{} --> {}".format(name, storedlist[name]))

一些额外的提示:
  1. 在你的frq函数中,你应该用有效的Python语句pass替换skip

  2. 不要定义几个函数(clssaclssbclssc),它们除了使用不同的输入文件名外完全相同,你可以编写一个只需要将文件名作为参数传递给它的单个函数(并给这个函数一个更好的名称):

    def print_scores(filename):
        f = open(filename, 'rb')
        storedlist = pickle.load(f)
        ...
    

    然后在clssq函数内部,你可以用以下代码替换:

    if clss=='a':
        clssa()
    elif clss=='b':
        clssb()
    elif clss=='c':
        clssc()
    

    使用以下代码:

    filename = {'a': 'Class6A.txt',
                'b': 'Class6B.txt',
                'c': 'Class6C.txt'}[clss]
    print_scores(filename)
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接