用于循环使用dict嵌套的多级列表的函数不能正常工作

2024-10-01 15:44:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我想比较两个列表并验证它们是否相同。虽然列表中的项可能有不同的顺序,所以仅仅比较list1 == list2是行不通的。 这些列表可以嵌套到具有dict、string、integer和list的多个级别中,因此仅使用sorted(list1) == sorted(list2)也不起作用。你知道吗

我试图创建一个函数,它遍历一个多级列表,并按升序对其中的每个列表进行排序。 到目前为止,我得到的结果只对第一级main列表进行排序。所有其他的“子列表”都在函数中进行排序,但是当我打印最终结果时,它们在使用函数之前是以相同的方式取消排序的。你知道吗

迄今为止创建的函数:

def sort_multilevel_obj(items):    
    if isinstance(items, dict):
        for v in items.values():
            if isinstance(v, list):
                v = sorted(v)
            v = sort_multilevel_obj(v)
    if isinstance(items, list):
        items = sorted(items)
        for i in items:
            i = sort_multilevel_obj(i)

    return items

多级列表示例:

mylist = [
    'string1',
    [
        {
            1:'one',
            2:'two',
            3:[4,2,'ddd'],
            4:{'x':'xx'}
        },
        'substring'
    ],
    {
        'somekey':7,
        'anotherkey':[
            'ccccccc',
            100,
            4,
            'blabla'
        ]
    }
]

当我将列表传递到函数中时,得到的结果是:

[{'z': ['ccccccc', 100, 4, 'afsafas'], 'f': 7}, [{1: 'one', 2: 'two', 3: [4, 2, 'ddd'], 4: {'x': 'xx'}}, 'substring'], 'string1']

第一个列表(string,list,dict)排序正确(to dict,list,string),但是dict(['ccccccc', 100, 4, 'afsafas'])中的列表应该作为[4, 100, 'afsafas', 'ccccccc']返回,但这根本不起作用。 我做错什么了?你知道吗


Tags: 函数obj列表stringif排序itemssort
1条回答
网友
1楼 · 发布于 2024-10-01 15:44:40

尝试使用v.sort()而不是v = sorted(v)v.sort()改变原始列表,而sorted(v)返回新对象。有关v.sort()sorted(v)之间差异的另一种解释,请参见answer。你知道吗

之所以v = sorted(v)不改变list/dict本身中的值,是因为变量v基本上只是对dict/list中原始值的引用。当您使用v = <something>时,您将该变量指向另一个对象,因此不会更改原始值。你知道吗

相关问题 更多 >

    热门问题