我下面的字典叫nested
:
{1: {1: {'x0': Decimal('21.600')}},
2: {1: {'x0': Decimal('223.560')}, 2: {'x0': Decimal('21.600')}},
3: {1: {'x0': Decimal('223.560')},
2: {'x0': Decimal('279.552')},
3: {'x0': Decimal('290.868')}},
4: {1: {'x0': Decimal('21.600')}, 2: {'x0': Decimal('223.560')}},
5: {1: {'x0': Decimal('21.600')}},
6: {1: {'x0': Decimal('223.560')}},
7: {1: {'x0': Decimal('223.560')}, 2: {'x0': Decimal('256.896')}},
8: {1: {'x0': Decimal('223.560')},
2: {'x0': Decimal('232.307')},
3: {'x0': Decimal('244.550')},
4: {'x0': Decimal('253.296')}},
9: {1: {'x0': Decimal('223.560')},
2: {'x0': Decimal('277.219')},
3: {'x0': Decimal('288.064')}},
10: {1: {'x0': Decimal('223.560')},
2: {'x0': Decimal('255.648')},
3: {'x0': Decimal('281.909')},
4: {'x0': Decimal('288.314')}},
11: {1: {'x0': Decimal('223.560')},
2: {'x0': Decimal('259.712')},
3: {'x0': Decimal('295.884')}},
12: {1: {'x0': Decimal('223.560')}, 2: {'x0': Decimal('288.064')}},
13: {1: {'x0': Decimal('223.560')},
2: {'x0': Decimal('273.152')},
3: {'x0': Decimal('299.412')}},
14: {1: {'x0': Decimal('223.560')},
2: {'x0': Decimal('259.712')},
3: {'x0': Decimal('295.884')}},
15: {1: {'x0': Decimal('223.560')}},
16: {1: {'x0': Decimal('223.560')},
2: {'x0': Decimal('246.303')},
3: {'x0': Decimal('272.564')},
4: {'x0': Decimal('278.969')}},
17: {1: {'x0': Decimal('223.560')}},
18: {1: {'x0': Decimal('223.560')}},
19: {1: {'x0': Decimal('223.560')},
2: {'x0': Decimal('249.746')},
3: {'x0': Decimal('260.590')}},
20: {1: {'x0': Decimal('223.560')},
2: {'x0': Decimal('239.300')},
3: {'x0': Decimal('265.560')},
4: {'x0': Decimal('271.965')},
5: {'x0': Decimal('294.708')}},
21: {1: {'x0': Decimal('223.560')}},
22: {1: {'x0': Decimal('223.560')}},
23: {1: {'x0': Decimal('223.560')}},
24: {1: {'x0': Decimal('223.560')},
2: {'x0': Decimal('273.152')},
3: {'x0': Decimal('299.412')}},
25: {1: {'x0': Decimal('223.560')}, 2: {'x0': Decimal('260.868')}},
26: {1: {'x0': Decimal('223.560')},
2: {'x0': Decimal('249.746')},
3: {'x0': Decimal('260.590')}},
27: {1: {'x0': Decimal('223.560')},
2: {'x0': Decimal('246.303')},
3: {'x0': Decimal('272.564')},
4: {'x0': Decimal('278.969')},
5: {'x0': Decimal('298.215')}},
28: {1: {'x0': Decimal('223.560')}},
29: {1: {'x0': Decimal('223.560')}},
30: {1: {'x0': Decimal('223.560')}, 2: {'x0': Decimal('295.596')}}
我试图按每个嵌套字典中的x0
值进行排序。
我只想对“内部”值进行排序,因此对于我的具体示例:
{1: {1: {'x0': Decimal('21.600')}},
2: {1: {'x0': Decimal('21.600')}, 2: {'x0': Decimal('223.560')}},
[...]
我正在尝试使用sorted()
方法对其进行排序:
sorted_dict = sorted(nested.values(), key=lambda x: x['x0'])
但是,这给了我以下错误:
KeyError: 'x0'
如您所见,在2
内,对嵌套的字典进行了排序。
为澄清起见,我的字典实际上包含另一个键:
{1: {1: {'text': 'Hi there!', 'x0': Decimal('21.600')}},
2: {1: {'text': 'My email is', 'x0': Decimal('223.560')},
2: {'text': 'example@domain.com', 'x0': Decimal('21.600')}},
[...]
从@Willem实施解决方案时,仅对x0
进行排序,而没有对text
键进行排序:
{1: {1: {'text': 'Hi there!', 'x0': Decimal('21.600')}},
2: {1: {'text': 'My email is', 'x0': Decimal('21.600')},
2: {'text': 'example@domain.com', 'x0': Decimal('223.560')}},
[...]
答案 0 :(得分:1)
x0
键在子词典中定义。因此,不能通过在外部值上使用sorted(..)
来对其进行排序。
您可以构建如下字典:
from operator import itemgetter
{k : dict(enumerate(sorted(v.values(), key=itemgetter('x0')), 1))
for k, v in nested.items() }
我们在这里假设子字典的键具有键1
,2
,...,但是使用列表而不是键的字典以这种方式增加可能更有意义
对于给定的样本数据,这给我们:
{1: {1: {'x0': Decimal('21.600')}},
2: {1: {'x0': Decimal('21.600')}, 2: {'x0': Decimal('223.560')}},
3: {1: {'x0': Decimal('223.560')},
2: {'x0': Decimal('279.552')},
3: {'x0': Decimal('290.868')}},
4: {1: {'x0': Decimal('21.600')}, 2: {'x0': Decimal('223.560')}},
5: {1: {'x0': Decimal('21.600')}},
6: {1: {'x0': Decimal('223.560')}},
7: {1: {'x0': Decimal('223.560')}, 2: {'x0': Decimal('256.896')}},
8: {1: {'x0': Decimal('223.560')},
2: {'x0': Decimal('232.307')},
3: {'x0': Decimal('244.550')},
4: {'x0': Decimal('253.296')}},
9: {1: {'x0': Decimal('223.560')},
2: {'x0': Decimal('277.219')},
3: {'x0': Decimal('288.064')}},
10: {1: {'x0': Decimal('223.560')},
2: {'x0': Decimal('255.648')},
3: {'x0': Decimal('281.909')},
4: {'x0': Decimal('288.314')}},
11: {1: {'x0': Decimal('223.560')},
2: {'x0': Decimal('259.712')},
3: {'x0': Decimal('295.884')}},
12: {1: {'x0': Decimal('223.560')}, 2: {'x0': Decimal('288.064')}},
13: {1: {'x0': Decimal('223.560')},
2: {'x0': Decimal('273.152')},
3: {'x0': Decimal('299.412')}},
14: {1: {'x0': Decimal('223.560')},
2: {'x0': Decimal('259.712')},
3: {'x0': Decimal('295.884')}},
15: {1: {'x0': Decimal('223.560')}},
16: {1: {'x0': Decimal('223.560')},
2: {'x0': Decimal('246.303')},
3: {'x0': Decimal('272.564')},
4: {'x0': Decimal('278.969')}},
17: {1: {'x0': Decimal('223.560')}},
18: {1: {'x0': Decimal('223.560')}},
19: {1: {'x0': Decimal('223.560')},
2: {'x0': Decimal('249.746')},
3: {'x0': Decimal('260.590')}},
20: {1: {'x0': Decimal('223.560')},
2: {'x0': Decimal('239.300')},
3: {'x0': Decimal('265.560')},
4: {'x0': Decimal('271.965')},
5: {'x0': Decimal('294.708')}},
21: {1: {'x0': Decimal('223.560')}},
22: {1: {'x0': Decimal('223.560')}},
23: {1: {'x0': Decimal('223.560')}},
24: {1: {'x0': Decimal('223.560')},
2: {'x0': Decimal('273.152')},
3: {'x0': Decimal('299.412')}},
25: {1: {'x0': Decimal('223.560')}, 2: {'x0': Decimal('260.868')}},
26: {1: {'x0': Decimal('223.560')},
2: {'x0': Decimal('249.746')},
3: {'x0': Decimal('260.590')}},
27: {1: {'x0': Decimal('223.560')},
2: {'x0': Decimal('246.303')},
3: {'x0': Decimal('272.564')},
4: {'x0': Decimal('278.969')},
5: {'x0': Decimal('298.215')}},
28: {1: {'x0': Decimal('223.560')}},
29: {1: {'x0': Decimal('223.560')}},
30: {1: {'x0': Decimal('223.560')}, 2: {'x0': Decimal('295.596')}}}
或带有额外的'text'
键:
{1: {1: {'text': 'Hi there!', 'x0': Decimal('21.600')}},
2: {1: {'text': 'example@domain.com', 'x0': Decimal('21.600')},
2: {'text': 'My email is', 'x0': Decimal('223.560')}}}