我想按照小到大的确认次数对列表进行排序。如果确认为空,则确认编号与零相同。我收到以下错误。怎么解决它?
排序前
[
{
'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}]
答案 0 :(得分:3)
您可以使用dict.get
取消KeyError
提供默认值0
:
sorted_list = sorted(lst, key=lambda x: int(x.get('confirmation', 0)), reverse=True)
另外,请记住将字符串值转换为数字类型,因此排序是数字而非词典。
答案 1 :(得分:0)
您可以使用dict.get函数将默认值0指定为&#34;确认&#34;如果密钥不在密码中,则为密钥。
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