Python中根据字典的value值对学生的成绩分数排序

本文介绍了一种从文本文档中读取学生分数,并使用Python进行排序的方法。分数以姓名和数值形式存储,通过字典结构处理,最终将排序后的结果保存到新的文件中。

当学生的分数是以“姓名”+“分数”存储在文本文档中时,将“姓名”存储为字典中的key值,“分数”存储为字典中的value值,通过比较value值的大小进行学生分数的排序。

例如下面三个学生:

张三 87.5
李四 92
王五 71

实现的Python代码如下:

def read(fileName):
    st = []
    f = open(fileName,'r',encoding='utf-8')
    rows = f.readlines()
    for row in rows:
        s = row.strip("\n").split(" ")
        if len(s)==2:
            d = {"Name":s[0],"Score":str(s[1])}
            st.append(d)
    return st

def sort(st):
    for i in range(len(st)):
        for j in range(i+1,len(st)):
            if st[i]["Score"] < st[j]["Score"]:
                temp = st[i]
                st[i] = st[j]
                st[j] = temp

    return st

def save(st):
    f = open("../sorted.txt",'w')
    for s in st:
        f.write(s['Name']+" "+str(s["Score"])+"\n")
    #f.close

if __name__ == '__main__':

    fileName = "../marks.txt"
    st = read(fileName)
    st = sort(st)
    save(st)

<think>我们有一个字典,其都是整数,我们希望根据这些整数字典进行排序。在Python中,字典本身是无序的(在Python3.6之前),但从Python3.7开始,字典会保持插入顺序。但是,我们可能想按照的大小排序,并得到一个新的有序字典(或者只是得到一个按排序的键对列表)。有两种常见的排序需求:1.按照排序,得到一个键对的列表(每个元素是(key,value)元组)2.按照排序,并创建一个新的字典(保持排序后的顺序)我们可以使用内置的`sorted()`函数,并指定`key`参数。方法:使用`sorted()`函数对字典的项(`dict.items()`)进行排序。`dict.items()`返回键对的可迭代对象,每个元素是一个元组`(key,value)`。排序时可以指定`key`参数,它是一个函数,用于从每个元素中提取比较键。这里我们希望按照排序,也就是元组的第二个元素。同时,由于是整数,我们可以直接比较。例如,我们有一个字典:```pythonmy_dict={'apple':5,'banana':2,'cherry':8,'dates':3}```如果我们要按照升序排序,可以这样做:```pythonsorted_items=sorted(my_dict.items(),key=lambdax:x[1])```这将返回一个列表:```python[('banana',2),('dates',3),('apple',5),('cherry',8)]```如果要降序排序,可以添加`reverse=True`参数:```pythonsorted_items=sorted(my_dict.items(),key=lambdax:x[1],reverse=True)```如果我们希望得到一个新的有序字典(按排序顺序),我们可以将排序后的列表传递给`dict`构造函数。但是注意,在Python3.7及以上版本中,字典会保持这个顺序。```pythonsorted_dict=dict(sorted_items)```但是,由于字典在3.7版本之后才保证顺序,如果你需要显式的有序字典,并且对顺序的操作有更多要求(比如重新排序),可以使用`collections.OrderedDict`(尽管在3.7之后普通字典已经有序,但为了兼容性或者强调有序,可以使用):```pythonfromcollectionsimportOrderedDictsorted_dict=OrderedDict(sorted_items)```另外,如果我们只需要对键排序(但最终访问的时候按排序的键来访问),也可以只对键排序:```pythonsorted_keys=sorted(my_dict,key=lambdax:my_dict[x])```然后我们可以通过循环这些键来访问排序后的。总结:根据字典的整数排序的步骤:1.通过`items()`获取键对。2.使用`sorted()`函数,并指定`key`参数为选择(即元组的第二个元素)的函数。3.如果需要字典,将排序后的键对列表转换为字典(或有序字典)。注意:如果不是整数,但可以比较(比如浮点数),同样适用。示例代码:我们将使用上面的`my_dict`作为例子。</think> ### 如何在 Python 中按照字典的整数排序Python根据字典的整数排序,可以使用内置的 `sorted()` 函数配合自定义排序键。以下是三种实用方法: #### 方法 1:按键排序(返回元组列表) ```python my_dict = {'math': 95, 'phys': 87, 'chem': 92, 'art': 78} # 按升序排序(从小到大) sorted_by_value = sorted(my_dict.items(), key=lambda x: x[1]) print(sorted_by_value) # 输出: [('art', 78), ('phys', 87), ('chem', 92), ('math', 95)] # 按降序排序(从大到小) sorted_by_value_desc = sorted(my_dict.items(), key=lambda x: x[1], reverse=True) print(sorted_by_value_desc) # 输出: [('math', 95), ('chem', 92), ('phys', 87), ('art', 78)] ``` #### 方法 2:按字典获取排序后的键列表 ```python # 获取按升序排序的键列表 sorted_keys = sorted(my_dict, key=lambda k: my_dict[k]) print(sorted_keys) # 输出: ['art', 'phys', 'chem', 'math'] # 获取按降序排序的键列表 sorted_keys_desc = sorted(my_dict, key=lambda k: my_dict[k], reverse=True) print(sorted_keys_desc) # 输出: ['math', 'chem', 'phys', 'art'] ``` #### 方法 3:保持排序字典顺序(Python 3.7+) ```python # 创建按排序后的有序字典 sorted_dict = dict(sorted(my_dict.items(), key=lambda x: x[1])) print(sorted_dict) # 输出: {'art': 78, 'phys': 87, 'chem': 92, 'math': 95} # 检查类型 print(type(sorted_dict)) # 输出: <class 'dict'> ``` #### 技术说明: 1. `key=lambda x: x[1]` 指定排序依据为键对的第二个元素(即)[^1][^2] 2. `reverse=True` 实现降序排序 3. Python 3.7+ 后字典保留插入顺序,可直接将排序结果转换为字典[^3] 4. 若是字符串格式数字,需先转换类型:`key=lambda x: int(x[1])` #### 复杂排序示例: ```python grades = {'Alice': ('A', 92), 'Bob': ('B', 85), 'Charlie': ('A+', 97)} # 按元组中的分数排序(嵌套) sorted_grades = sorted(grades.items(), key=lambda x: x[1][1], reverse=True) print(sorted_grades) # 输出: [('Charlie', ('A+', 97)), ('Alice', ('A', 92)), ('Bob', ('B', 85))] ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值