根据条目对JSON数组进行排序和重新排列

时间:2019-01-30 11:28:48

标签: python list numpy sorting

我是python新手,但仍在寻找解决以下任务的优雅方法。我已经搜索了整个论坛,但只发现了针对其他列表问题的非常特殊的解决方案。

我正在尝试分析,排序和重新排列python中的JSON数组。但是到目前为止,我还没有找到一种可行的解决方案来对列表从最低值条目到最高值条目进行排序。

这是我的示例列表:

 [{'path': 'file_abc.wav', 'val': [0.49]}, 
  {'path': 'file_dfg.wav', 'val': [0.0]}, 
  {'path': 'file_ejh.wav', 'val': [1.0]}]

我想根据输入列表的值从最低到最高重新排列输入列表:

[{'path_old': 'file_dfg.wav', 'val': [0.0]}, 
 {'path_old': 'file_abc.wav', 'val': [0.49]}, 
 {'path_old': 'file_ejh.wav', 'val': [1.0]}]

如果有人可以给我提示如何以一种好的方式解决此问题,我将感到非常高兴!

3 个答案:

答案 0 :(得分:3)

尝试一下:

sorted(your_list, key=lambda x:x['val'][0])

sorted接受一个参数(key),如果设置了该参数,它将基于该参数对可迭代项进行排序。

答案 1 :(得分:0)

lst = [
  {'path': 'file_abc.wav', 'val': [0.49]}, 
  {'path': 'file_dfg.wav', 'val': [0.0]}, 
  {'path': 'file_ejh.wav', 'val': [1.0]}
]
print(sorted(lst, key=lambda d: d['val'][0]))

此打印:

[
  {'path': 'file_dfg.wav', 'val': [0.0]}, 
  {'path': 'file_abc.wav', 'val': [0.49]}, 
  {'path': 'file_ejh.wav', 'val': [1.0]}
]

答案 2 :(得分:0)

如果您不创建新列表,则也可以使用lst.sort(key = lambda function)

aa =  [{'path': 'file_abc.wav', 'val': [0.49]}, 
  {'path': 'file_dfg.wav', 'val': [0.0]}, 
  {'path': 'file_ejh.wav', 'val': [1.0]}]


aa.sort(key = lambda x:x['val'])
print (aa)

#OUTPUT:
#[{'path': 'file_dfg.wav', 'val': [0.0]}, {'path': 'file_abc.wav', 'val': [0.49]}, {'path': 'file_ejh.wav', 'val': [1.0]}]