按字母顺序排序

时间:2015-04-14 16:29:10

标签: python sorting dictionary

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

这是我的代码到目前为止:   进口泡菜

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))

3 个答案:

答案 0 :(得分:4)

使用sorted关键字。

for key, value in sorted(storedlist.items()):
    # etc

How to sort dictionary by key in numerical order Python

https://wiki.python.org/moin/HowTo/Sorting

答案 1 :(得分:2)

字典不是有序的,因此您必须对键进行排序,然后访问字典:

for key in sorted(storedlist.iterkeys()):
    print (("{} --> {}").format(key, storedlist[key]))

答案 2 :(得分: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函数中,您应该将skip替换为pass,这是一个有效的Python语句。

  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)