【问题标题】:Sorting a dictionary by its sub value按子值对字典进行排序
【发布时间】:2020-02-19 12:03:10
【问题描述】:

我目前有一个 Python3 中的字典,看起来像这样

{'parentkey1': {'value1': 3, 'value2': 0},
 'parentkey2': {'value1': 2, 'value2': 5},
 'parentkey3': {'value1': 6, 'value2': 9},
 'parentkey4': {'value1': 8, 'value2': 3}
 }

有没有办法可以安排它变成的嵌套字典

{'parentkey1': {'value2': 0, 'value1': 3},
 'parentkey2': {'value1': 2, 'value2': 5},
 'parentkey3': {'value1': 6, 'value2': 9},
 'parentkey4': {'value2': 3, 'value1': 8}
}

【问题讨论】:

    标签: python python-3.x sorting dictionary


    【解决方案1】:

    因为python 3.6 dictionaries are insertion ordered所以你可以使用:

     d = {'parentkey1': {'value1': 3, 'value2': 0},
     'parentkey2': {'value1': 2, 'value2': 5},
     'parentkey3': {'value1': 6, 'value2': 9},
     'parentkey4': {'value1': 8, 'value2': 3}
     }
    
    d = {k : dict(sorted(v.items(), key=lambda x: x[1])) for k, v in d.items()}
    d
    

    输出:

    {'parentkey1': {'value2': 0, 'value1': 3},
     'parentkey2': {'value1': 2, 'value2': 5},
     'parentkey3': {'value1': 6, 'value2': 9},
     'parentkey4': {'value2': 3, 'value1': 8}}
    

    如果您希望在 Python 的其他实现中保证插入顺序,可以使用 OrderedDict

    【讨论】:

      【解决方案2】:

      给你。

        data = {'parentkey1': {'value1': 3, 'value2': 0},
        'parentkey2': {'value1': 2, 'value2': 5},
        'parentkey3': {'value1': 6, 'value2': 9},
        'parentkey4': {'value1': 8, 'value2': 3}
        }
      
        for key, value in data.items():
          print(value)
      
        print("\n")
      
        for key, value in data.items():
          new = {}
          if value["value1"] >=  value["value2"]:
            new["value2"] = value["value2"]
            new["value1"] = value["value1"]
          else:
            new["value1"] = value["value1"]
            new["value2"] = value["value2"]
          data[key] = new
      
        for key, value in data.items():
          print(value)
      

      【讨论】:

      • 您好,感谢您的回复!只是一个问题,如果字典子列表中的值超过 2 个怎么办?
      • kederrac 的答案是您想要的答案。他让我讨厌我的。
      【解决方案3】:

      如果每个项目的 value2 > value1 ,只需切换值即可

      data = {'parentkey1': {'value1': 3, 'value2': 0},
        'parentkey2': {'value1': 2, 'value2': 5},
        'parentkey3': {'value1': 6, 'value2': 9},
        'parentkey4': {'value1': 8, 'value2': 3}
        }
      
      
      for key, value in data.items():
          if value['value1'] > value['value2']:
              value['value1'], value['value2'] = value['value2'], value['value1']
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-09
        • 1970-01-01
        • 1970-01-01
        • 2011-02-22
        相关资源
        最近更新 更多