Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过固定一个键';s值作为第一个元素_Python_Python 3.x_List_Sorting - Fatal编程技术网

Python 通过固定一个键';s值作为第一个元素

Python 通过固定一个键';s值作为第一个元素,python,python-3.x,list,sorting,Python,Python 3.x,List,Sorting,我有一张订购的清单 [OrderedDict([('song', 'Hoses'), ('lyric', 'crea'), ('Music', 'reut'), ('BGM', 'DJU'), ('Totalsecs', 223.457894215)]) ,OrderedDict([('song', 'Goses'), ('lyric', 'recrea'), ('Music', 'reutser'), ('BGM', 'DJS'), ('Totalsecs', 158.5145538689

我有一张订购的清单

[OrderedDict([('song', 'Hoses'), ('lyric', 'crea'), ('Music', 'reut'), ('BGM', 'DJU'),  ('Totalsecs', 223.457894215)])
,OrderedDict([('song', 'Goses'), ('lyric', 'recrea'), ('Music', 'reutser'), ('BGM', 'DJS'),  ('Totalsecs', 158.514553868968)])
,OrderedDict([('song', 'reoses'), ('lyric', 'arecrea'), ('Music', 'hiureut'), ('BGM', 'VJU'),  ('Totalsecs', 11.879461215421)])
,OrderedDict([('song', 'reteoses'), ('lyric', 'makuri'), ('Music', 'reut'), ('BGM', 'DJU'),  ('Totalsecs', 123.513353868968)]
)]
我想通过固定第一个元素,根据totalsecs键对它们进行排序,即在上面的ordereddict列表中,我想固定
('totalsecs',158.514553868968)
作为第一个元素,以便将其余的元素排序到下面,从而使有序dict列表成为

[OrderedDict([('song', 'Goses'), ('lyric', 'recrea'), ('Music', 'reutser'), ('BGM', 'DJS'),  ('Totalsecs', 158.514553868968)])
 ,OrderedDict([('song', 'Hoses'), ('lyric', 'crea'), ('Music', 'reut'), ('BGM', 'DJU'),  ('Totalsecs', 223.457894215)])
,OrderedDict([('song', 'reoses'), ('lyric', 'arecrea'), ('Music', 'hiureut'), ('BGM', 'VJU'),  ('Totalsecs', 11.879461215421)])
,OrderedDict([('song', 'reteoses'), ('lyric', 'makuri'), ('Music', 'reut'), ('BGM', 'DJU'),  ('Totalsecs', 123.513353868968)]
)]

基本上,我想修复第一个元素,其余元素应该按排序顺序排列,如果发现有一个数字小于第一个元素,那么它不应该位于第一个元素之前。我们在python中有任何内置函数吗?我已经对列表提出了类似的问题,但对于有序的列表,一种方法是分别执行两种排序,然后合并

[OrderedDict([('song', 'Hoses'), ('lyric', 'crea'), ('Music', 'reut'), ('BGM', 'DJU'),  ('Totalsecs', 223.457894215)])
,OrderedDict([('song', 'Goses'), ('lyric', 'recrea'), ('Music', 'reutser'), ('BGM', 'DJS'),  ('Totalsecs', 158.514553868968)])
,OrderedDict([('song', 'reoses'), ('lyric', 'arecrea'), ('Music', 'hiureut'), ('BGM', 'VJU'),  ('Totalsecs', 11.879461215421)])
,OrderedDict([('song', 'reteoses'), ('lyric', 'makuri'), ('Music', 'reut'), ('BGM', 'DJU'),  ('Totalsecs', 123.513353868968)]
)]
给定
OrderedDict
对象的列表
a

from operator import itemgetter

# retrieve threshold
threshold = A[1]['Totalsecs']

# sort above threshold
sort1 = sorted((i for i in A if i['Totalsecs'] >= threshold), key=itemgetter('Totalsecs'))

# sort below threshold
sort2 = sorted((i for i in A if i['Totalsecs'] < threshold), key=itemgetter('Totalsecs'))

# combine into one list
res = sort1 + sort2

print(res)

[OrderedDict([('song', 'Goses'), ('lyric', 'recrea'), ('Music', 'reutser'),
              ('BGM', 'DJS'), ('Totalsecs', 158.514553868968)]),
 OrderedDict([('song', 'Hoses'), ('lyric', 'crea'), ('Music', 'reut'),
              ('BGM', 'DJU'), ('Totalsecs', 223.457894215)]),
 OrderedDict([('song', 'reoses'), ('lyric', 'arecrea'), ('Music', 'hiureut'),
              ('BGM', 'VJU'), ('Totalsecs', 11.879461215421)]),
 OrderedDict([('song', 'reteoses'), ('lyric', 'makuri'), ('Music', 'reut'),
              ('BGM', 'DJU'), ('Totalsecs', 123.513353868968)])]
从操作员导入itemgetter
#检索阈值
阈值=A[1]['Totalsecs']
#排序高于阈值
sort1=sorted((如果i['Totalsecs']>=threshold,则i代表A中的i),key=itemgetter('Totalsecs'))
#排序低于阈值
sort2=排序((如果i['Totalsecs']<阈值,则i代表i),key=itemgetter('Totalsecs'))
#合并成一个列表
res=sort1+sort2
打印(res)
[OrderedDict([('song','Goses'),('lyric','recrea'),('Music','reutser'),
('BGM','DJS'),('Totalsecs',158.514553868968)],
订单信息([('song','Horses'),('lyric','crea'),('Music','reut'),
('BGM','DJU'),('Totalsecs',223.457894215)],
按顺序排列([('song','reoses'),('lyric','arecrea'),('Music','hiureut'),
('BGM','VJU'),('Totalsecs',11.879461215421)],
按顺序排列([('song','reteoses'),('lyric','makuri'),('Music','reut'),
('BGM','DJU'),('Totalsecs',123.513353868968)]]

在结果中,元素与第一个元素的间隔是如何排序的?223.45->11.87->123.51似乎没有排序。按递增顺序,158旁边的数字是223,如果发现有一个数字小于第一个元素,则它不应位于第一个元素之前,因此11位于223旁边,123位于11旁边,高于阈值的数字需要在低于阈值的数字下排序。似乎与您上次的@RoadRunner非常相似是的,这就是我在问题中提到的