按字母顺序对dict排序

2024-09-24 00:29:35 发布

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

我的程序可以将每个学生的名字和他们的3分从一个dict文件中输出,但我需要按字母顺序对数据进行排序。我怎样才能按姓氏的字母顺序排列姓名和分数呢?

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

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

Tags: 文件数据keyin程序排序顺序value
3条回答

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

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

使用排序关键字。

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

为了按学生的姓氏排序,首先必须从用作字典键的全名中提取。以下功能应该能够做到这一点:

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函数中,应该用pass替换skip,这是一个有效的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)
    

相关问题 更多 >