而可变类型如列表、

发布时间:2025-06-24 18:01:54  作者:北方职教升学中心  阅读量:132


元组(只要元组内的元素也都是不可变类型)等可以作为字典的键。

# 排序的根据:item[1]为取字典的value(元组),再一个[0]取元组的第一个元素,降序sorted_dict =dict(sorted(test_data.items(),key=lambdaitem:item[1][0],reverse=True))print(f"排序后的数据:{sorted_dict}")# 排序的根据:item[1]为取字典的value(元组),再一个[1]取元组的第2个元素,降序sorted_dict =dict(sorted(test_data.items(),key=lambdaitem:item[1][1],reverse=True))print(f"排序后的数据:{sorted_dict}")

输出:

排序后的数据:{'088ac61e-3cd0-4151-95cf-89c48896e3b1': (91, 1324), '6dc09e8d-cb6c-419d-8761-dcb2e711ce8b': (90, 1424), 'f445a442-75f1-4bc8-b5fd-d307dacd8ca5': (89, 5985), '75840f3c-bfe5-46db-a497-c09f188340e7': (86, 4193), 'd0cf8b90-a727-4ddb-80b8-0895b9048521': (77, 6566), '22109c71-cd32-4470-854f-8db16faee701': (74, 5404), 'ed999515-86ae-45da-94ae-ec5ea54e2c19': (43, 5994), '33150465-f728-43dd-957a-05fcb1913b6b': (11, 7203), '904aa218-7624-497b-8ea4-fc778cbc5790': (5, 1842)}排序后的数据:{'33150465-f728-43dd-957a-05fcb1913b6b': (11, 7203), 'd0cf8b90-a727-4ddb-80b8-0895b9048521': (77, 6566), 'ed999515-86ae-45da-94ae-ec5ea54e2c19': (43, 5994), 'f445a442-75f1-4bc8-b5fd-d307dacd8ca5': (89, 5985), '22109c71-cd32-4470-854f-8db16faee701': (74, 5404), '75840f3c-bfe5-46db-a497-c09f188340e7': (86, 4193), '904aa218-7624-497b-8ea4-fc778cbc5790': (5, 1842), '6dc09e8d-cb6c-419d-8761-dcb2e711ce8b': (90, 1424), '088ac61e-3cd0-4151-95cf-89c48896e3b1': (91, 1324)}

取top N

降序排序后,使用切片操作来获取前N个元素。如果字典中的元素多于3个,它将只返回前3个根据值降序排序的项。

输出:

排序后的数据:{'33150465-f728-43dd-957a-05fcb1913b6b': (11, 7203), 'd0cf8b90-a727-4ddb-80b8-0895b9048521': (77, 6566), 'ed999515-86ae-45da-94ae-ec5ea54e2c19': (43, 5994)}

使用collections模块的OrderedDict

虽然从Python 3.7开始,普通字典就保持了插入顺序,但在更早的版本中,或者在你需要明确指定排序依据的情况下,可以使用collections.OrderedDict

fromcollections importOrderedDict# 根据值排序并创建OrderedDictsorted_dict =OrderedDict(sorted(test_data.items(),key=lambdaitem:item[1][0]))print(f"排序后的数据:{sorted_dict}")

输出:

排序后的数据:OrderedDict([('904aa218-7624-497b-8ea4-fc778cbc5790', (5, 1842)), ('33150465-f728-43dd-957a-05fcb1913b6b', (11, 7203)), ('ed999515-86ae-45da-94ae-ec5ea54e2c19', (43, 5994)), ('22109c71-cd32-4470-854f-8db16faee701', (74, 5404)), ('d0cf8b90-a727-4ddb-80b8-0895b9048521', (77, 6566)), ('75840f3c-bfe5-46db-a497-c09f188340e7', (86, 4193)), ('f445a442-75f1-4bc8-b5fd-d307dacd8ca5', (89, 5985)), ('6dc09e8d-cb6c-419d-8761-dcb2e711ce8b', (90, 1424)), ('088ac61e-3cd0-4151-95cf-89c48896e3b1', (91, 1324))])

仅返回排序后的键或值列表:

如果你只需要排序后的键或值列表,而不是一个新的字典,可以直接返回sorted()函数的结果:

# 返回排序后的键列表sorted_dict =sorted(test_data.keys())print(f"排序后的数据:{sorted_dict}")# 返回排序后的值列表sorted_dict =sorted(test_data.values())print(f"排序后的数据:{sorted_dict}")

输出:

排序后的数据:['088ac61e-3cd0-4151-95cf-89c48896e3b1', '22109c71-cd32-4470-854f-8db16faee701', '33150465-f728-43dd-957a-05fcb1913b6b', '6dc09e8d-cb6c-419d-8761-dcb2e711ce8b', '75840f3c-bfe5-46db-a497-c09f188340e7', '904aa218-7624-497b-8ea4-fc778cbc5790', 'd0cf8b90-a727-4ddb-80b8-0895b9048521', 'ed999515-86ae-45da-94ae-ec5ea54e2c19', 'f445a442-75f1-4bc8-b5fd-d307dacd8ca5']排序后的数据:[(5, 1842), (11, 7203), (43, 5994), (74, 5404), (77, 6566), (86, 4193), (89, 5985), (90, 1424), (91, 1324)]

注意:

  • sorted()函数返回的是一个列表,需要将排序后的项转换回字典时,使用dict()函数,如上面的例子所示。最后,使用dict()函数将这个列表转换成一个新的字典。

    请注意,如果原始字典中的元素少于3个,上述代码将返回所有元素。此外,由于字典在Python 3.7及以后版本中是有序的,这意味着sorted_dict_by_key将按照排序后的顺序保持键的顺序。

    # 正确的字典键的例子my_dict ={"apple":1,2:"two",(3.0,"tuple"):"tuple key"}# 错误的字典键的例子,会引发TypeError# my_dict = {#     [1, 2, 3]: "list key"  # 这会引发错误,因为列表是可变类型#}
如果你需要根据键(key)或值(value)对字典中的项进行排序,可以使用内置的sorted()函数,它返回一个排序后的列表。

生成模拟数据

先安装uuid

pip3 install uuid
# 模拟测试的数据importrandomimportuuidtest_data ={}fori inrange(1,10):test_data[str(uuid.uuid4())]=(random.randint(1,100),random.randint(1000,9999))print(f"模拟的数据  :{test_data}")

输出的数据:

模拟的数据  :{'d0cf8b90-a727-4ddb-80b8-0895b9048521': (77, 6566), 'f445a442-75f1-4bc8-b5fd-d307dacd8ca5': (89, 5985), 'ed999515-86ae-45da-94ae-ec5ea54e2c19': (43, 5994), '22109c71-cd32-4470-854f-8db16faee701': (74, 5404), '6dc09e8d-cb6c-419d-8761-dcb2e711ce8b': (90, 1424), '088ac61e-3cd0-4151-95cf-89c48896e3b1': (91, 1324), '33150465-f728-43dd-957a-05fcb1913b6b': (11, 7203), '75840f3c-bfe5-46db-a497-c09f188340e7': (86, 4193), '904aa218-7624-497b-8ea4-fc778cbc5790': (5, 1842)}

实现

根据键(Key)排序:

# 排序的根据:item[0]为取字典的keysorted_dict =dict(sorted(test_data.items(),key=lambdaitem:item[0]))print(f"排序后的数据:{sorted_dict}")

输出:

排序后的数据:{'088ac61e-3cd0-4151-95cf-89c48896e3b1': (91, 1324), '22109c71-cd32-4470-854f-8db16faee701': (74, 5404), '33150465-f728-43dd-957a-05fcb1913b6b': (11, 7203), '6dc09e8d-cb6c-419d-8761-dcb2e711ce8b': (90, 1424), '75840f3c-bfe5-46db-a497-c09f188340e7': (86, 4193), '904aa218-7624-497b-8ea4-fc778cbc5790': (5, 1842), 'd0cf8b90-a727-4ddb-80b8-0895b9048521': (77, 6566), 'ed999515-86ae-45da-94ae-ec5ea54e2c19': (43, 5994), 'f445a442-75f1-4bc8-b5fd-d307dacd8ca5': (89, 5985)}

根据值(Value)排序:

排序

# 排序的根据:item[1]为取字典的value(元组),再一个[0]取元组的第一个元素sorted_dict =dict(sorted(test_data.items(),key=lambdaitem:item[1][0]))print(f"排序后的数据:{sorted_dict}")# 排序的根据:item[1]为取字典的value(元组),再一个[1]取元组的第2个元素sorted_dict =dict(sorted(test_data.items(),key=lambdaitem:item[1][1]))print(f"排序后的数据:{sorted_dict}")

输出:

排序后的数据:{'904aa218-7624-497b-8ea4-fc778cbc5790': (5, 1842), '33150465-f728-43dd-957a-05fcb1913b6b': (11, 7203), 'ed999515-86ae-45da-94ae-ec5ea54e2c19': (43, 5994), '22109c71-cd32-4470-854f-8db16faee701': (74, 5404), 'd0cf8b90-a727-4ddb-80b8-0895b9048521': (77, 6566), '75840f3c-bfe5-46db-a497-c09f188340e7': (86, 4193), 'f445a442-75f1-4bc8-b5fd-d307dacd8ca5': (89, 5985), '6dc09e8d-cb6c-419d-8761-dcb2e711ce8b': (90, 1424), '088ac61e-3cd0-4151-95cf-89c48896e3b1': (91, 1324)}排序后的数据:{'088ac61e-3cd0-4151-95cf-89c48896e3b1': (91, 1324), '6dc09e8d-cb6c-419d-8761-dcb2e711ce8b': (90, 1424), '904aa218-7624-497b-8ea4-fc778cbc5790': (5, 1842), '75840f3c-bfe5-46db-a497-c09f188340e7': (86, 4193), '22109c71-cd32-4470-854f-8db16faee701': (74, 5404), 'f445a442-75f1-4bc8-b5fd-d307dacd8ca5': (89, 5985), 'ed999515-86ae-45da-94ae-ec5ea54e2c19': (43, 5994), 'd0cf8b90-a727-4ddb-80b8-0895b9048521': (77, 6566), '33150465-f728-43dd-957a-05fcb1913b6b': (11, 7203)}

降序

如果你想根据字典的值进行降序排序,可以在 sorted()函数中添加一个参数 reverse=True。浮点数、

前言

在Python中,字典(dict)本身是无序的,直到Python 3.7版本,字典在迭代时会保持插入顺序。字典等则不能作为键,因为它们的内容可以改变,这将导致哈希值的不一致,从而影响字典的查找效率。不可变类型如整数、接着,使用切片[:3]来获取排序后列表的前3个元素。

# 排序的根据:item[1]为取字典的value(元组),再一个[1]取元组的第2个元素,降序,取Top 3sorted_dict =dict(sorted(test_data.items(),key=lambdaitem:item[1][1],reverse=True)[:3])print(f"排序后的数据:{sorted_dict}")

在这个例子中,sorted()函数首先根据每个项的值(item[1][1])进行排序,然后通过设置reverse=True来实现降序排序。字符串、

  • 从Python 3.6开始,字典的键必须是不可变类型,这是因为字典的键需要能够被哈希化,以便在字典中快速定位和访问。这会告诉函数返回一个降序排序的列表,然后你可以将这个列表转换成字典。而可变类型如列表、