Python字典按值排序后如何重新分配升序索引
Python字典按值排序后如何重新分配升序索引
看起来你想要的不是保留原字典的键,而是把排序后的值重新绑定从1开始的连续升序索引对吧?我来给你捋捋怎么实现~
你之前的做法是把原字典的键值对按值排序,结果里还带着原来的键(比如3、1这些),哪怕用OrderedDict也只是保留了这个排序后的键值对顺序,并没有替换成新的索引。
要得到你想要的[(1,4),(2,6),(3,8),(4,10)],核心是抛弃原键,把排序后的值和从1开始的连续整数一一配对,具体可以这样写:
nums = {1:6, 2:10, 3:4, 4:8} # 第一步:提取所有值并排序 sorted_values = sorted(nums.values()) # 第二步:用从1开始的索引和排序后的值配对 result = [(i+1, val) for i, val in enumerate(sorted_values)] print(result) # 输出 [(1, 4), (2, 6), (3, 8), (4, 10)]
如果你觉得列表推导式不够直观,用zip配合range也能达到同样效果:
nums = {1:6, 2:10, 3:4, 4:8} # 生成从1到字典长度的连续整数,和排序后的值配对 result = list(zip(range(1, len(nums)+1), sorted(nums.values()))) print(result) # 同样得到 [(1, 4), (2, 6), (3, 8), (4, 10)]
简单说就是先把原字典里的值单独拿出来排序,再给它们配上新的、从1开始的升序索引,这样就完全符合你的需求啦~
备注:内容来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

