初期データの順序を保持するように順序付き辞書(OD)を初期化する正しい方法は何ですか?
from collections import OrderedDict
# Obviously wrong because regular dict loses order
d = OrderedDict({'b':2, 'a':1})
# An OD is represented by a list of tuples, so would this work?
d = OrderedDict([('b',2), ('a', 1)])
# What about using a list comprehension, will 'd' preserve the order of 'l'
l = ['b', 'a', 'c', 'aa']
d = OrderedDict([(i,i) for i in l])
質問:
う
OrderedDict
タプルのリストの順序を保持する、またはリストまたはリストのリストなどのタプルまたはタプルのタプルは、初期の時間(上記第2および第3の実施例)に渡されましたか?OrderedDict
実際に注文を維持しているかどうかを確認するにはどうすればよいですか?にdict
は予測不可能な順序があるので、テストベクトルの最初の順序がdictの予測不可能な順序と同じである場合はどうでしょうか。たとえば、d = OrderedDict({'b':2, 'a':1})
を書く代わりにd = OrderedDict({'a':1, 'b':2})
、順序が保持されていると誤って結論付ける可能性があります。この場合、私dict
はa がアルファベット順に並べられていることを発見しましたが、常にそうであるとは限りません。反例を使用して、データ構造が順序を保持するかどうかを検証する信頼できる方法は何ですか?
PS 参照用にここに残しておきます。「OrderedDictコンストラクターとupdate()メソッドはどちらもキーワード引数を受け入れますが、Pythonの関数呼び出しセマンティクスパスインキーワード引数は通常の順序付けされていない辞書を使用しているため、順序は失われます」
PPS:うまくいけば、将来的に、OrderedDictはkwargsの順序も保持するようになります(例1):http ://bugs.python.org/issue16991