<p>对于python2和python3两者,您可以如下操作,其中我假设<code>p</code>的值丢失,我假设<code>sys.maxsize</code>的值丢失,这将确保如果<code>p</code>的值丢失,它们总是在列表的末尾</p>
<pre><code>import sys
a = [
{'p': 3, 'id': 'ab1'},
{'p': 10, 'id': 'ab2'},
{'p': 5, 'id': 'ab3'},
{'p': 8, 'id': 'ab4'},
{'id': 'ab5'}
]
print(sorted(a, key=lambda i: i.get('p', sys.maxsize)))
</code></pre>
<p>这会给你</p>
<pre><code>[{'p': 3, 'id': 'ab1'}, {'p': 5, 'id': 'ab3'}, {'p': 8, 'id': 'ab4'}, {'p': 10, 'id': 'ab2'}, {'id': 'ab5'}]
</code></pre>
<p>如果与<code>sys.maxsize</code>相比,另一个解决方案是过度杀戮,则将没有键<code>p</code>的字典分离出来,对包含键<code>p</code>的剩余字典排序,然后通过附加非<code>p</code>键字典来扩展它。这也避免了我们为<code>item.get()</code>中的<code>p</code>提供默认值</p>
<pre><code>import sys
a = [
{'p': 3, 'id': 'ab1'},
{'p': 10, 'id': 'ab2'},
{'p': 5, 'id': 'ab3'},
{'p': 8, 'id': 'ab4'},
{'id': 'ab5'}
]
#Dictionaries with key p
p_items = [item for item in a if 'p' in item.keys()]
#Dictionaries not with key p
non_p_items = [item for item in a if 'p' not in item.keys()]
#Sort the p-key dictionaries
result = sorted(p_items, key=lambda i: i.get('p'))
#Attach non p-key dictionay items at end
result.extend(non_p_items)
print(result)
</code></pre>