2015-12-14 40 views
0

我有一個列表插入字典詞典中的列表,以便

[{'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'}...] 

什麼是最好的Python的方式做到這一點?

回答

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

可以使用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}]