首页 > 解决方案 > 如何对字典中的字典列表进行排序并在python中覆盖它

问题描述

我有字典,其中包含字典列表:

example = {
"first": [
 {"a": 1, "b": 2},
 {"a": 0, "x": 5}
],
"second": [
{"a": 5, "b": 2},
{"a": 2, "x": 5}
]
}

我想根据键“a”的值对列表“第一”和“第二”进行排序。期望的结果是:

desired = {
"first": [
 {"a": 0, "x": 5},
 {"a": 1, "b": 2}
],
"second": [
{"a": 2, "x": 5},
{"a": 5, "b": 2}
]
}

现在,我不想创建全新的字典。只需更新“示例”字典中的“第一”和“第二”列表。我尝试了什么:

from operator import itemgetter

for k, v in example.items():
    v = sorted(v, key=itemgetter('a'))

这对我的示例字典没有影响。但是它适用于单个列表,例如:

x = [{"a": 1, "b": 2},
    {"a": 0, "x": 5}
]
z = sorted(x, key = itemgetter('a'))
>>> print(z)
[{'a': 0, 'x': 5}, {'a': 1, 'b': 2}]

标签: pythonpython-3.xlistsortingdictionary

解决方案


这是因为当您分配排序列表时,您只是将“标签”v指向排序列表,而不是将其写入字典。见下文,该代码应该做你想做的事。

for k, v in example.items():
    example[k] = sorted(v, key=itemgetter('a'))

推荐阅读