想象一下,您必须根据特定键的值对字典列表进行排序。请注意,某些字典可能缺少该键,在这种情况下,您默认将该键的值设置为0。
样本输入
[{'a': 1, 'b': 2}, {'a': 10, 'b': 3}, {'b': 5}]
样本输出(按键“ a”的值排序)
[{'b': 5}, {'a': 1, 'b': 2}, {'a': 10, 'b': 3}]
请注意,{'b': 5}
在排序顺序中排在第一位,因为它的'a'(0)值最低
如果所有字典都保证具有键“ a”,我会使用input.sort(key=operator.itemgetter('a'))
。或者,我可以将输入字典转换为collections.defaultdict
然后进行排序。
是否有一种方法可以就地执行此操作而不必创建新的字典或更新现有的字典? operator.itemgetter
可以处理丢失的密钥吗?
答案 0 :(得分:3)
>>> items = [{'a': 1, 'b': 2}, {'a': 10, 'b': 3}, {'b': 5}]
>>> sorted(items, key=lambda d: d.get('a', 0))
[{'b': 5}, {'a': 1, 'b': 2}, {'a': 10, 'b': 3}]
或者就地更新现有字典
items.sort(key=lambda d: d.get('a', 0))
答案 1 :(得分:0)
或if
中的sorted
:
>>> items = [{'a': 1, 'b': 2}, {'a': 10, 'b': 3}, {'b': 5}]
>>> sorted(items,key=lambda x: x['a'] if 'a' in x else 0)
[{'b': 5}, {'a': 1, 'b': 2}, {'a': 10, 'b': 3}]
>>>