Python如何在while循环中实现字典元组按首元素排序
字典按值元组内最大数值排序的实现
核心实现逻辑
Python 3.7及以上版本的原生字典会保留键值对的插入顺序,因此只需要将字典的items()遍历结果按规则排序后,重新转为字典即可得到有序结果。
针对你给出的示例需要注意:元组内同时包含int类型数值和str类型字符串,直接对整个元组调用max()会触发类型比较错误,因此有两种稳妥的排序key编写方式:
- 如果你要对比的目标数值固定在元组的某一个索引位(比如示例中7、4、2都在元组第0位,索引为0),直接取对应索引值作为排序依据即可,性能最优
- 如果数值位置不固定,先过滤出元组内所有int类型值再取最大值,避免类型报错
基础排序代码(适配你的示例)
origin_dict = {'a': (2, 0, 'a'), 'b': (4, 0, 'b'), 'c': (7, 0, 'c')} # 写法1:已知数值在元组索引0位时使用 sorted_dict = dict( sorted(origin_dict.items(), key=lambda x: x[1][0], reverse=True) ) # 写法2:数值位置不固定,取元组内最大int值排序时使用 sorted_dict = dict( sorted( origin_dict.items(), key=lambda x: max(i for i in x[1] if isinstance(i, int)), reverse=True ) ) # 两种写法运行后结果均为 {'c': (7, 0, 'c'), 'b': (4, 0, 'b'), 'a': (2, 0, 'a')}
说明:参数
reverse=True表示按数值从大到小降序排列,如果需要从小到大升序排列,去掉该参数即可。
while循环内嵌入实现
把排序逻辑放在循环内即可,每次循环执行业务逻辑更新字典后,调用排序代码得到最新的有序字典,参考示例:
# 初始化字典 my_dict = {'a': (2, 0, 'a'), 'b': (4, 0, 'b'), 'c': (7, 0, 'c')} run_loop = True while run_loop: # 此处写你循环内的业务逻辑,比如动态增删改my_dict的键值对 # ---- 排序逻辑段 开始---- sorted_items = sorted( my_dict.items(), key=lambda x: max(i for i in x[1] if isinstance(i, int)), reverse=True ) current_sorted_dict = dict(sorted_items) # ---- 排序逻辑段 结束---- # 后续可以直接使用current_sorted_dict做后续业务处理 print("当前循环字典排序结果:", current_sorted_dict) # 此处写入你的循环退出条件,示例为执行1次后退出 run_loop = False
内容的提问来源于stack exchange,提问作者satia
相关产品推荐
相关产品推荐

