Python 键不为'时字典的排序列表;不存在
我有一本字典,想按价格升序排序。 但很少有字典对象没有可供排序的价格键。 我想把这些对象移到列表的末尾 我试过下面的代码Python 键不为'时字典的排序列表;不存在,python,sorting,Python,Sorting,我有一本字典,想按价格升序排序。 但很少有字典对象没有可供排序的价格键。 我想把这些对象移到列表的末尾 我试过下面的代码 sorted(listObj,key=partial(sort_func,['price'])) 使用sort_func的任何其他建议?如果您不想使用lambda,您可以尝试以下方法: new_data = sorted([i for i in data if "price" in i], reverse=True)+[i for i in data if "errorCod
sorted(listObj,key=partial(sort_func,['price']))
使用
sort_func
的任何其他建议?如果您不想使用lambda
,您可以尝试以下方法:
new_data = sorted([i for i in data if "price" in i], reverse=True)+[i for i in data if "errorCode" in i]
输出:
[{u'price': 5222.0, u'Name': u'United Kingdon'}, {u'price': 5237.0, u'Name': u'US'}, {u'price': 5283.0, u'Name': u'General'}, {u'errorCode': u'500', u'errorMsg': u'Pfffbt. server down.'}, {u'errorCode': u'500', u'errorMsg': u'Pfffbt. server down.'}]
如果不想使用
lambda
,可以尝试以下方法:
new_data = sorted([i for i in data if "price" in i], reverse=True)+[i for i in data if "errorCode" in i]
输出:
[{u'price': 5222.0, u'Name': u'United Kingdon'}, {u'price': 5237.0, u'Name': u'US'}, {u'price': 5283.0, u'Name': u'General'}, {u'errorCode': u'500', u'errorMsg': u'Pfffbt. server down.'}, {u'errorCode': u'500', u'errorMsg': u'Pfffbt. server down.'}]
您可以添加一个“缺少密钥”计数器,并为每个缺少的密钥递增该计数器。返回一个
(缺少的\u键、字段)
的元组,它们将在最后排序,缺少的键最多的排在最后
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
返回一个元组。如果第一个元素(缺少_键)相等,则由下一个元素(字段)计算。但它首先根据丢失钥匙的数量进行排序 您可以添加一个“缺少密钥”计数器,并为每个缺少的密钥递增该计数器。返回一个(缺少的\u键、字段)
的元组,它们将在最后排序,缺少的键最多的排在最后
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
返回一个元组。如果第一个元素(缺少_键)相等,则由下一个元素(字段)计算。但它首先根据丢失钥匙的数量进行排序 sorted(data,key=lambda x:x.get(“price”,0))
我还没有运行它,但是类似于此的东西应该会得到一个排序列表,这里我假设如果价格不存在,那么将0
作为默认值,您也可以尝试使用-1
。我在sort\u func中检查多个条件以对数据进行排序,因此我必须无论如何使用它。此外,它还可以通过多个键进行排序,不仅是“price”。排序(data,key=lambda x:x.get(“price”,0))
我还没有运行它,但是类似于这一点的东西应该会让您得到一个排序列表,这里我假设如果价格不存在,那么将0
作为默认值,您也可以尝试使用-1
。我在sort\u func中检查多个条件以对数据进行排序,因此我必须无论如何使用它。此外,它还可以按多个键进行排序,而不仅仅是“price”。我在sort\u func
中检查多个条件以对数据进行排序,因此我必须无论如何使用它。此外,它还可以按多个键进行排序,而不仅仅是“price”。我在sort\u func
中检查多个条件以对数据进行排序,因此我必须无论如何使用它。此外,它还可以按多个键进行排序,而不仅仅是“价格”。你能解释一下丢失的键是如何影响的吗?如果解释不清楚,请在这些评论中提出更多问题。我只想通过返回丢失的键thissort\u func
首先按数据中不包含的键数排序,然后是字段列表。因此,丢失的键最多的排序最高。所有字段的数据排序最低。你能解释一下缺少的键是如何影响的吗?如果解释不清楚,请在这些注释中提出更多问题。我只想通过返回缺少的键来了解它是如何工作的thissort\u func
首先按不在数据中的键数排序,然后是字段列表。因此,丢失的键最多的排序最高。所有字段的数据排序最低。