键不存在时的字典排序列表

沙阿神话

我有字典列表,想按价格升序排序。但是很少有字典对象没有可用于排序的价格键。我想将这些对象移动到列表的末尾。

我试过下面的代码

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

es

您可以添加一个 '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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用 localecompare 在键不存在时进行排序 javascript

如果键不存在,Python 将键添加到字典列表中

当键本身是类型时,c#“给定的键在字典中不存在”

字典键不存在-但确实存在

仅当字典键不存在时才为其添加值

Python更新字典中的键(如果不存在)

如果键不存在,则字典返回默认值

KeyNotFoundException:字典中不存在给定的键

字典中不存在给定的键。C#

Oauth Facebook 字典中不存在给定的键

在python中连接可能不存在的字典键

Python字典理解访问不存在的键

使用if语句向字典添加不存在的键(Python)

从 pyspark 数据框中删除那些列中的条目不存在于字典的键列表中的行

System.Collections.Generic.KeyNotFoundException:从PUSHSHARP发送推式通知时,字典中不存在给定的键

如果列表表中不存在键,则添加空行

字典对象功能存在,将不存在的键添加到字典中

“字典中不存在给定的键”-但是键存在

休眠序列不存在

添加外键Django时,列不存在错误

当键不存在时地图给出的值

键不存在时的 AsyncStorage.getItem 行为

jq - 当键不存在时返回真

insertMany 仅当带值的键不存在时

不存在的外键

MongoDB排序依据仅存在项,值在前的键,空值在键或最后不存在

在Python中检索列表或字典中不存在的元素时如何获得类似错误的值而不是错误

从有序列表中的键排序字典值

排序列表/字典在索引处修改键的值