<p>我发现制作一个独立的键控功能更加清晰:</p>
<pre><code>#!/usr/bin/env python
lst = [
("site-nfv01-swsto01",),
("site-nfv01-swsto01V",),
("site-nfv01-swsto02",),
("site-nfv02-swsto02",),
("site-nfv02-swsto01",),
("site-nfv02-swsto01V",),
]
def my_key(item):
"""Return a tuple that can be used for ordering the item."""
first, middle, last = item[0].split("-")
# For the middle part, what we really care about is the int after the "nfv" string.
middle_int = int(middle[3:])
# For the last part, we mostly care about the int after the "swsto" string...
last_value = last[5:]
# ...but not quite. Let's make sure that items with a trailing "V" sort lower than ones without
# a "V".
if last_value.endswith("V"):
last_tuple = int(last_value[:-1]), "V"
else:
last_tuple = int(last_value), "z"
# Python sorts tuples one component at a time, so return a tuple that can be compared against
# the tuples generated for other values.
return first, middle_int, last_tuple
# For demonstration purposes, show the sorting key generated for each item in the list.
for item in lst:
print(item, my_key(item))
# Use that sorting key to actually sort the list.
print(sorted(lst, key=my_key))
</code></pre>
<p>这使您可以非常明确地知道排序键是如何生成的,因为测试起来要容易得多</p>