Python如何按嵌套字典内层值的降序生成新的内层数字键
可行实现方案
可以直接通过排序+遍历的方式生成目标字典,核心是对内层字典的键值对按值做降序排列后,按顺序生成从1开始的排名作为新内层字典的键即可。
实现代码
# 输入字典 dict1 = {'AB':{'QB':0.11,'CD':0.10,'DE':0.4},'CD':{'FE':0.33,'TEW':0.22,'FEW':0.99,'FEQ':0.45}} output = {} for outer_k, inner_map in dict1.items(): # 按内层值降序排序键值对,值越大排位越靠前 sorted_pairs = sorted(inner_map.items(), key=lambda item: item[1], reverse=True) # 组装带排名的内层结构 ranked_map = {} for idx, (k, v) in enumerate(sorted_pairs, start=1): ranked_map[idx] = {k: v} output[outer_k] = ranked_map
运行结果
执行上述代码后得到的output和给出的期望输出完全一致:
{ 'AB': {1: {'DE': 0.4}, 2: {'QB': 0.11}, 3: {'CD': 0.1}}, 'CD': {1: {'FEW': 0.99}, 2: {'FEQ': 0.45}, 3: {'FE': 0.33}, 4: {'TEW': 0.22}} }
如果偏好更简洁的写法,也可以用嵌套字典推导式实现完全相同的逻辑:
output = { ok: { rank: {k:v} for rank, (k,v) in enumerate(sorted(iv.items(), key=lambda x:x[1], reverse=True), 1) } for ok, iv in dict1.items() }
注意:Python 3.7+版本字典会默认保留插入顺序,排序后生成的内层字典遍历顺序和排名顺序一致;如果是更低版本,需要使用
collections.OrderedDict来保证顺序。
内容的提问来源于stack exchange,提问作者Noorulain Islam
相关产品推荐
相关产品推荐

