2017-08-29 70 views
1

我想按小到大的確認數排序列表。如果確認爲空,則確認號碼與零相同。我得到了以下錯誤。如何解決它?用lambda排序的Python

之前排序

[ 
    { 
     'id':'1', 
     'confirmation':'20', 
    }, 
    { 
     'id':'2', 
     'confirmation':'10', 
    }, 
    { 
     'id':'3' 
    } 
] 

後排序

[ 
    { 
     'id':'3' 
    }, 
    { 
     'id':'2', 
     'confirmation':'10', 
    },  
    { 
     'id':'1', 
     'confirmation':'20', 
    } 
] 

測試

$ python3 
Python 3.4.3 (default, Nov 17 2016, 01:08:31) 

>>> dict1 = {"id":1, "confirmation":20} 
>>> dict2 = {"id":2, "confirmation":10} 
>>> dict3 = {"id":3} 
>>> list = [dict1, dict2, dict3] 
>>> sorted_list = sorted(list, key=lambda x: x['confirmation'], reverse=True) 

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 1, in <lambda> 
KeyError: 'confirmation' 

更新1

>>> sorted_list = sorted(list, key=lambda x: int(x.get('confirmation', 0)), reverse=False) 
>>> sorted_list 
[{'id': 3}, {'id': 2, 'confirmation': 10}, {'id': 1, 'confirmation': 20}] 

回答

3

您可以使用dict.get壓制KeyError供應的0默認值:

sorted_list = sorted(lst, key=lambda x: int(x.get('confirmation', 0)), reverse=True) 

還有,記得將字符串值轉換爲數值型,所以排序是不數值辭書。

0

如果密鑰不在字典中,您可以使用dict.get函數將默認值0賦予「確認」鍵。

lst = [ 
    { 
     'id':'1', 
     'confirmation':'20', 
    }, 
    { 
     'id':'2', 
     'confirmation':'10', 
    }, 
    { 
     'id':'3' 
    } 
] 
sorted_list = sorted(lst, key = lambda x : int(x.get('confirmation',0))) 
print sorted_list