gpt4 book ai didi

python - 自定义排序 Python 列表总是在开头的某些字符串?

转载 作者:太空宇宙 更新时间:2023-11-04 01:04:36 24 4
gpt4 key购买 nike

我正在使用 Python 2.7。我有一个这样的字符串列表:

mylist = ['is_local', 'quantity_123', 'actual_cost_456', 
'actual_cost_123', 'quantity_456', 'total_items_123',
'id', 'total_items_456', 'name', 'postcode']

该列表将始终包含 idnamepostcodeis_local 字段,但是其他字段会有所不同。

我想对列表进行排序,使其始终以上面设置的字段开头,然后按字母顺序排列其他字段。

例如:

mylist.sort(custom_sort)
print mylist
['id', 'name', 'postcode', 'is_local', 'actual_cost_123',
'actual_cost_456', 'quantity_123', 'quantity_456' ...]

我的问题是如何定义custom_sort 函数。我试过这个:

def custom_sort(a, b):
if a == 'id':
return 1
elif a == 'name':
return 1
elif a == 'postcode':
return 1
elif a == 'is_dispensing':
return 1
elif a > b:
return 1
else:
return -1

但是 mylist.sort(custom_sort) 给我一个错误:TypeError: argument of type 'NoneType' is not iterable

最佳答案

如果您在 mylist 中没有重复元素,您可以使用 set.difference 方法来获取自定义列表与 mylist 之间的差异,然后排序并将其附加到您的自定义列表:

>>> l=['id', 'name', 'postcode', 'is_local']
>>> l+sorted(set(mylist).difference(l))
['id', 'name', 'postcode', 'is_local', 'actual_cost_123', 'actual_cost_456', 'quantity_123', 'quantity_456', 'total_items_123', 'total_items_456']
>>>

否则你可以使用列表理解:

>>> l+sorted([i for i in mylist if not i in l])
['id', 'name', 'postcode', 'is_local', 'actual_cost_123', 'actual_cost_456', 'quantity_123', 'quantity_456', 'total_items_123', 'total_items_456']
>>>

关于python - 自定义排序 Python 列表总是在开头的某些字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31121606/

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