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

时间:2015-12-14 07:06:52

标签: python list dictionary

我有一个清单

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

序列是升序Floatm < Floatn < ...我想在列表中插入字典{'FloatVal':FloatX,'StrVal':'StrX'},使Floatx按顺序排列。如果是Floatm<FloatX<Floatn,那么我希望最终列表为

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

最好的pythonic方法是什么?

2 个答案:

答案 0 :(得分:4)

使用合适的密钥再次对其进行排序。 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'}]

答案 1 :(得分:1)

您可以使用bisect模块或使用此模块的an existing implementation of the sorted list。后者:

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}]