按键值(或缺少键的默认值)对字典排序列表

时间:2019-01-29 02:17:37

标签: python

想象一下,您必须根据特定键的值对字典列表进行排序。请注意,某些字典可能缺少该键,在这种情况下,您默认将该键的值设置为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可以处理丢失的密钥吗?

2 个答案:

答案 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}]
>>>