擅长:python、mysql、java
<p>如果希望“ind10”位于“ind9”之后,则需要对键使用自然排序算法;^)</p>
<p>来自于<a href="http://code.activestate.com/recipes/577679/#c3" rel="nofollow">ActiveState</a>的wizkid</strong></p>
<pre><code>def keynat(string):
r'''A natural sort helper function for sort() and sorted()
without using regular expression.
>>> items = ('Z', 'a', '10', '1', '9')
>>> sorted(items)
['1', '10', '9', 'Z', 'a']
>>> sorted(items, key=keynat)
['1', '9', '10', 'Z', 'a']
'''
r = []
for c in string:
if c.isdigit():
if r and isinstance(r[-1], int):
r[-1] = r[-1] * 10 + int(c)
else:
r.append(int(c))
else:
r.append(c)
return r
data = collections.OrderedDict(
sorted(
data.iteritems(),
key=lambda row:keynat(row[0])
)
)
</code></pre>