代码之家  ›  专栏  ›  技术社区  ›  Hariharan Ragothaman

python中多约束条件下按值排序字典

  •  0
  • Hariharan Ragothaman  · 技术社区  · 2 年前

    考虑一下下面的字典:让我们称之为 hmap
    int 值为 tuples

    {1: (80, 40, 120), 2: (60, 20, 80), 3: (80, 50, 130), 4: (60, 90, 150), 5: (70, 90, 160), 6: (70, 80, 150)}
    

    reverse 顺序可以执行以下操作。
    例如:

    mm = {k:v for k, v in sorted(hmap.items(), key=lambda x:x[1], reverse=True)}
    

    {3: (80, 50, 130), 1: (80, 40, 120), 5: (70, 90, 160), 6: (70, 80, 150), 4: (60, 90, 150), 2: (60, 20, 80)}
    

    因为我正在整理 dict tuple .

    请考虑以下场景:

    1. 同样,如果我想按元组中的第二个值排序,该怎么办;然而,如果有一个平局,我想按 key 价值

    成为:

    {1: (80, 40, 120), 2: (60, 20, 80), 3: (80, 50, 130)}
    

    这里,如果我们按中元组的第一个值对其排序 颠倒 ; 会有平局;自从 80 在两个键中都可以找到 1 和键 3

    按中的第一个值排序的最佳方法是什么 钥匙 平局时的价值?

    1 回复  |  直到 2 年前
        1
  •  1
  •   DeepSpace    2 年前
    1. 告诉 key 要使用切片来忽略第一个元素以创建没有第一个元素的新元组,请执行以下操作:

      dict(sorted(hmap.items(), key=lambda x: x[1][1:], reverse=True))
      

      {
          5: (70, 90, 160),
          4: (60, 90, 150),
          6: (70, 80, 150),
          3: (80, 50, 130),
          1: (80, 40, 120),
          2: (60, 20, 80)
      }
      

    1. 通过构建元组手动指定lambda内的条件 键的值之前有一个减号 x[0] 在这种情况下):

      dict(sorted(hmap.items(), key=lambda x: (x[1][0], -x[0]), reverse=True))
      

      输出

      {
          1: (80, 40, 120),
          3: (80, 50, 130),
          5: (70, 90, 160),
          6: (70, 80, 150),
          2: (60, 20, 80),
          4: (60, 90, 150)
      }