简体   繁体   English

按顺序在字典列表中插入字典

[英]Insert dictionary in a list of dictionaries in order

I have a list 我有一个清单

 [{'FloatVal':Floatm,'StrVal':'Strm'},{'FloatVal':Floatn,'StrVal':'Strn'}...]

The sequence are ascending order Floatm < Floatn < ... I want to insert a dictionary {'FloatVal':FloatX,'StrVal':'StrX'} in the list making the Floatx in order. 顺序是升序Floatm < Floatn < ...我想在列表中插入字典{'FloatVal':FloatX,'StrVal':'StrX'} ,使Floatx顺序排列。 If Floatm<FloatX<Floatn then I want the final list to be 如果Floatm<FloatX<Floatn那么我希望最终列表为

 [{'FloatVal':Floatm,'StrVal':'Strm'},{'FloatVal':FloatX,'StrVal':'StrX'},{'FloatVal':Floatn,'StrVal':'Strn'}...]

What would be the best pythonic way to do it? 最好的pythonic方法是什么?

Just sort it again, with a suitable key. 只需使用合适的键将其再次排序即可。 Python uses a stable sort that is fast for nearly-sorted objects. Python使用稳定的排序,对于几乎排序的对象来说速度很快。

>>> result =  [{'FloatVal':'Floatm','StrVal':'Strm'},{'FloatVal':'Floatnb','StrVal':'Strnb'}]
>>> result.append({'FloatVal':'Floatna','StrVal':'Strna'})
>>> result
[{'FloatVal': 'Floatm', 'StrVal': 'Strm'}, {'FloatVal': 'Floatnb', 'StrVal': 'Strnb'}, {'FloatVal': 'Floatna', 'StrVal':'Strna'}]
>>> result.sort(key=lambda x: x['FloatVal'])
>>> result
[{'FloatVal': 'Floatm', 'StrVal': 'Strm'}, {'FloatVal': 'Floatna', 'StrVal': 'Strna'}, {'FloatVal': 'Floatnb', 'StrVal':'Strnb'}]

You can use the bisect module, or an existing implementation of the sorted list that uses this module. 您可以使用bisect模块,也可以使用该模块的排序列表的现有实现 With the latter: 对于后者:

s = SortedCollection([{'FloatVal':1}, {'FloatVal':2}], key=lambda x: x['FloatVal'])
s.insert({'FloatVal': 1.5})
print(list(s))

[{'FloatVal': 1}, {'FloatVal': 1.5}, {'FloatVal': 2}]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM