我有这样的清单:
a = [
{'p': 3, 'id': 'ab1'},
{'p': 10, 'id': 'ab2'},
{'p': 5, 'id': 'ab3'},
{'p': 8, 'id': 'ab4'},
{'id': 'ab5'}
]
我想按a
的值对p
进行排序。如果dict没有p
,就把它放在后面。
我试着这样做:
print sorted(a, key=lambda i: i.get('p'))
结果是:
[{'id': 'ab5'}, {'p': 3, 'id': 'ab1'}, {'p': 5, 'id': 'ab3'}, {'p': 8, 'id': 'ab4'}, {'p': 10, 'id': 'ab2'}]
但你想得到的是:
[{'p': 3, 'id': 'ab1'}, {'p': 5, 'id': 'ab3'}, {'p': 8, 'id': 'ab4'}, {'p': 10, 'id': 'ab2'},{'id': 'ab5'}]
怎样才能用更简单的方法得到正确的结果?你知道吗
对于python2和python3两者,您可以如下操作,其中我假设
p
的值丢失,我假设sys.maxsize
的值丢失,这将确保如果p
的值丢失,它们总是在列表的末尾这会给你
如果与
sys.maxsize
相比,另一个解决方案是过度杀戮,则将没有键p
的字典分离出来,对包含键p
的剩余字典排序,然后通过附加非p
键字典来扩展它。这也避免了我们为item.get()
中的p
提供默认值这里有一个我不喜欢使用
lambda
的选项:使用
输出:
相关问题 更多 >
编程相关推荐