如何按具有不同项目大小的列表自定义对嵌套的 OrderedDict 进行排序?
How to custom sort nested OrderedDict by list with different item sizes?
我想对自定义列表进行排序 sort_by=['missed','stopped','prevented']
。我想按照那个确切的顺序对 var3
进行排序,这意味着它应该 尝试 并首先错过,然后停止,等等。我有一个看起来像这样的数据:
OrderedDict([
(
"A1",
[
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "stopped",
},
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "missed",
},
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "stopped",
},
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "stopped",
},
],
),
(
"A2",
[
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "stopped",
},
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "prevented",
},
],
),
(
"A3",
[
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "prevented",
},
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "missed",
},
],
),...
)
我正在努力实现这个目标:
OrderedDict([
(
"A1",
[
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "missed",
},
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "stopped",
},
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "stopped",
},
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "stopped",
},
],
),
(
"A2",
[
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "stopped",
},
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "prevented",
},
],
),
(
"A3",
[
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "missed",
},
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "prevented",
},
],
),...
)
我能够对 A1、A2、A3 进行排序,但是我该如何处理 A1、A2 和 A3 的嵌套和不同大小?这是我对 A1、A2、A3 进行排序的代码:
list_ordered = OrderedDict(sorted(t.items(), key=lambda item: sorted_by_title.index(item[0])))
假设d
输入OrderedDict,可以使用:
sort_by=['missed','stopped','prevented']
# compute a sorter dictionary for efficiency
sorter = {w:i for i,w in enumerate(sort_by)}
OrderedDict((k, sorted(v, key=lambda x: sorter.get(x.get('var3')))) for k,v in d.items())
输出:
OrderedDict([('A1',
[{'var1': 'xxxxx', 'var2': 'xxxxx', 'var3': 'missed'},
{'var1': 'xxxxx', 'var2': 'xxxxx', 'var3': 'stopped'},
{'var1': 'xxxxx', 'var2': 'xxxxx', 'var3': 'stopped'},
{'var1': 'xxxxx', 'var2': 'xxxxx', 'var3': 'stopped'}]),
('A2',
[{'var1': 'xxxxx', 'var2': 'xxxxx', 'var3': 'stopped'},
{'var1': 'xxxxx', 'var2': 'xxxxx', 'var3': 'prevented'}]),
('A3',
[{'var1': 'xxxxx', 'var2': 'xxxxx', 'var3': 'missed'},
{'var1': 'xxxxx', 'var2': 'xxxxx', 'var3': 'prevented'}])])
我想对自定义列表进行排序 sort_by=['missed','stopped','prevented']
。我想按照那个确切的顺序对 var3
进行排序,这意味着它应该 尝试 并首先错过,然后停止,等等。我有一个看起来像这样的数据:
OrderedDict([
(
"A1",
[
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "stopped",
},
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "missed",
},
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "stopped",
},
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "stopped",
},
],
),
(
"A2",
[
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "stopped",
},
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "prevented",
},
],
),
(
"A3",
[
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "prevented",
},
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "missed",
},
],
),...
)
我正在努力实现这个目标:
OrderedDict([
(
"A1",
[
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "missed",
},
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "stopped",
},
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "stopped",
},
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "stopped",
},
],
),
(
"A2",
[
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "stopped",
},
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "prevented",
},
],
),
(
"A3",
[
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "missed",
},
{
"var1": "xxxxx",
"var2": "xxxxx",
"var3": "prevented",
},
],
),...
)
我能够对 A1、A2、A3 进行排序,但是我该如何处理 A1、A2 和 A3 的嵌套和不同大小?这是我对 A1、A2、A3 进行排序的代码:
list_ordered = OrderedDict(sorted(t.items(), key=lambda item: sorted_by_title.index(item[0])))
假设d
输入OrderedDict,可以使用:
sort_by=['missed','stopped','prevented']
# compute a sorter dictionary for efficiency
sorter = {w:i for i,w in enumerate(sort_by)}
OrderedDict((k, sorted(v, key=lambda x: sorter.get(x.get('var3')))) for k,v in d.items())
输出:
OrderedDict([('A1',
[{'var1': 'xxxxx', 'var2': 'xxxxx', 'var3': 'missed'},
{'var1': 'xxxxx', 'var2': 'xxxxx', 'var3': 'stopped'},
{'var1': 'xxxxx', 'var2': 'xxxxx', 'var3': 'stopped'},
{'var1': 'xxxxx', 'var2': 'xxxxx', 'var3': 'stopped'}]),
('A2',
[{'var1': 'xxxxx', 'var2': 'xxxxx', 'var3': 'stopped'},
{'var1': 'xxxxx', 'var2': 'xxxxx', 'var3': 'prevented'}]),
('A3',
[{'var1': 'xxxxx', 'var2': 'xxxxx', 'var3': 'missed'},
{'var1': 'xxxxx', 'var2': 'xxxxx', 'var3': 'prevented'}])])