gpt4 book ai didi

python - 迭代与字典嵌套的多级列表的函数无法正常工作

转载 作者:太空宇宙 更新时间:2023-11-03 20:55:12 27 4
gpt4 key购买 nike

我想比较两个列表并验证它们是否相同。尽管列表中的项目可能具有不同的顺序,因此仅比较 list1 == list2 是行不通的。这些列表可以嵌套到包含字典、字符串、整数和列表的多级中,因此仅使用 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']

第一个列表(字符串,列表,字典)已正确排序(字典,列表,字符串),但字典内的列表(['ccccccc', 100, 4, 'afsafas']) 应该返回为 [4, 100, 'afsafas', 'ccccccc'] 但这不起作用。我做错了什么?

最佳答案

尝试使用v.sort()而不是v = sorted(v)v.sort()改变原始列表,而 sorted(v)返回一个新对象。看这个answer有关 v.sort() 之间差异的另一个解释和sorted(v) .

原因v = sorted(v)不会更改列表/字典本身中的值是因为变量 v基本上只是对字典/列表中原始值的引用。当您使用v = <something>时您将该变量指向另一个对象,因此不会更改原始值。

关于python - 迭代与字典嵌套的多级列表的函数无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56065975/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com