如何获取列表排序后首个元素对应的原变量名?
解决方案
问题的核心是:单独将值存入列表排序后,会丢失值与原变量名的关联关系,因此必须先保留变量名-值的映射,再进行排序操作。
方法一:使用字典存储映射(推荐,支持重复值)
直接用字典保存变量名和对应的值,再按值排序,排序后直接获取原变量名:
# 定义原始变量 orderA = 3 orderB = 7 orderC = 4 orderD = 2 # 构建变量名与值的映射字典 order_mapping = { 'orderA': orderA, 'orderB': orderB, 'orderC': orderC, 'orderD': orderD } # 按值从小到大排序,返回(变量名, 值)的元组列表 sorted_items = sorted(order_mapping.items(), key=lambda item: item[1]) # 获取排序后第一个元素的原变量名 target_var_name = sorted_items[0][0] target_value = sorted_items[0][1] print(f"排序后最小的值对应的原变量名:{target_var_name},值为:{target_value}")
运行结果会输出:排序后最小的值对应的原变量名:orderD,值为:2
方法二:值到变量名的反向映射(仅适用于值唯一的场景)
如果确定所有变量值不重复,可以先创建值到变量名的反向字典,再通过排序后的值查找变量名:
# 定义原始变量 orderA = 3 orderB = 7 orderC = 4 orderD = 2 # 构建值到变量名的反向映射 value_to_var = { orderA: 'orderA', orderB: 'orderB', orderC: 'orderC', orderD: 'orderD' } # 将值存入列表并排序 order = [orderA, orderB, orderC, orderD] order.sort() # 通过排序后的值查找原变量名 first_value = order[0] target_var_name = value_to_var[first_value] print(f"排序后第一个值对应的原变量名:{target_var_name}")
注意:如果存在多个变量值相同的情况,反向字典会覆盖重复值对应的变量名,导致结果错误,因此不推荐这种方法。
内容的提问来源于stack exchange,提问作者SomeonenamedPratik
相关产品推荐
相关产品推荐

