我有字典列表,想按价格升序排序。但是很少有字典对象没有可用于排序的价格键。我想将这些对象移动到列表的末尾。
我试过下面的代码
sorted(listObj, key=partial(sort_func, ['price']))
def sort_func(sort_by, listObj): fields = [] for key in sort_by: if key in listObj: fields.append(listObj[key]) return fields
我想对以下类型的数据进行排序:
数据 = [ { u'errorCode': u'500', u'errorMsg': u'Pfffbt. 服务器关闭。', }, { u'errorCode': u'500', u'errorMsg': u'Pfffbt. 服务器关闭。', }, { u'Name': u'United Kingdon', u'price': 5222.0, }, { u'price': 5237.0, u'Name': u'US', }, { u '名称': u'General', u'price': 5283.0,
在使用价格升序对这些数据进行排序时,5222.0
价格应该排在第一位而不是errorcode
对象。
注意:我不想使用 lambda 函数,因为它可能有多个键和一些条件来排序,sort_func
所以我sort_func
无论如何都必须使用。
我找到了一种解决方案,但它不可靠。
def sort_func(sort_by, listObj): fields = [] for key in sort_by: if key in listObj: fields.append(listObj[key]) else: fields.append(99999999999999999999999999) #无穷大 返回字段
使用的任何其他建议sort_func
?
您可以添加一个 'missing_key' 计数器并为每个丢失的键增加它。返回一个元组,(missing_keys, fields)
它们将在最后排序,最缺少的键排在最后。
def sort_func(sort_by, listObj):
missing_keys = 0
fields = []
for key in sort_by:
if key in listObj:
fields.append(listObj[key])
else:
missing_keys += 1
return missing_keys, fields
编辑:要求详细解释
元组(和列表)排序如下:比较第一个元素。如果第一个元素不相等,请使用该比较,否则比较第二个元素等......空元组/列表总是小于一个元素。所以:
lst = [
(), (10,), (1, []), (2, [10, 11]), (2, [100]), (0, [10, 9, 8]), (0, [11]), (1, [1, 1, 2])
]
print(sorted(lst))
印刷:
[
(),
(0, [10, 9, 8]),
(0, [11]),
(1, []),
(1, [1, 1, 2]),
(2, [10, 11]),
(2, [100]),
(10,)
]
这sort_func
将返回一个元组。如果第一个元素 (missing_keys) 相等,则由下一个元素(字段)对其进行评估。但它首先按丢失键的数量排序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句