簡體   English   中英

按值和鍵元組 python 對字典進行排序

[英]sort a dictionary by values and by key tuple 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',   
    }
 }

OUTPUT:

 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'))

您可以嘗試對字典項進行排序,這將根據鍵對字典進行排序,然后可以使用字典理解將排序結果解析為字典。

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())})

Output

        {
 (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'}
}

一種選擇可能只是:

dict(sorted(d.items()))

自 python 3.7 起,鍵的插入順序在字典中維護

dictionary = {
    (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",},
}

sorted_dictionary = {key: dictionary[key] for key in sorted(dictionary)}

print(sorted_dictionary)

Output:

{
    (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"},
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM