首页 > 解决方案 > 按值和键元组python对字典进行排序

问题描述

我想知道如何通过作为元组的键来组织字典:首先按第一个数字排序,然后是第二个字母,然后是第三个数字。

另外,我想知道如何首先按值组织(第一个值 1,然后是值 2,然后是值 3):

输入:

d= {
 (2,x,50): 
    {
        'val1': 2, 
        'val2': x,
        'val3': 50,
        'val4': 'hu',
        'val5': 'ho',   
    }
 (1,a,30): 
   {
       'val1': 1, 
       'val2': a,
       'val3': 30,
       'val4': 'hey',
       'val5': 'hi',   

    }, 
  (2,x,20): 
    {
        'val1': 2, 
        'val2': x,
        'val3': 20,
        'val4': 'hu',
        'val5': 'ho',   
    }
(2,b,10): 
    {
        'val1': 2, 
        'val2': b,
        'val3': 10,
        'val4': 'hu',
        'val5': 'ho',   
    }
 }

输出:

 d= {
(1,a,30): 
   {
       'val1': 1, 
       'val2': a,
       'val3': 30,
       'val4': 'hey',
       'val5': 'hi',   

    }, 
 (2,b,10): 
    {
        'val1': 2, 
        'val2': b,
        'val3': 10,
        'val4': 'hu',
        'val5': 'ho',   
    }
(2,x,20): 
    {
        'val1': 2, 
        'val2': x,
        'val3': 20,
        'val4': 'hu',
        'val5': 'ho',   
    }
 (2,x,50): 
    {
        'val1': 2, 
        'val2': x,
        'val3': 50,
        'val4': 'hu',
        'val5': 'ho',   
    }
  }

我试过按键订购:

   sorted(d, key = operator.itemgetter(1))

并尝试按值排序,但出现错误:

   sorted(d, key = operator.itemgetter('val1', 'val2', 'val3'))

标签: pythonsortingdictionary

解决方案


您可以尝试对字典项进行排序,这将根据键对字典进行排序,然后可以使用字典理解将排序结果解析为字典。

d= {
 (2,'x',50):
    {
        'val1': 2, 
        'val2': 'x',
        'val3': 50,
        'val4': 'hu',
        'val5': 'ho',   
    },
 (1,'a',30):
   {
       'val1': 1, 
       'val2': 'a',
       'val3': 30,
       'val4': 'hey',
       'val5': 'hi',   

    }, 
  (2,'x',20):
    {
        'val1': 2, 
        'val2': 'x',
        'val3': 20,
        'val4': 'hu',
        'val5': 'ho',   
    },
(2,'b',10):
    {
        'val1': 2, 
        'val2': 'b',
        'val3': 10,
        'val4': 'hu',
        'val5': 'ho',   
    }
 }
print({i[0]: i[1] for i in sorted(d.items())})

输出

        {
 (1, 'a', 30): {'val1': 1, 'val2': 'a', 'val3': 30, 'val4': 'hey', 'val5': 'hi'}, 
 (2, 'b', 10): {'val1': 2, 'val2': 'b', 'val3': 10, 'val4': 'hu', 'val5': 'ho'},
 (2, 'x', 20): {'val1': 2, 'val2': 'x', 'val3': 20, 'val4': 'hu', 'val5': 'ho'},
 (2, 'x', 50): {'val1': 2, 'val2': 'x', 'val3': 50, 'val4': 'hu', 'val5': 'ho'}
}

推荐阅读