[解決済み] OrderedDict のコンストラクタで初期化する場合、初期データの順番を保持するための正しい方法とは?
質問
順序付き辞書(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
はアルファベット順に並んでいることがわかりましたが、それが常に正しいとは限りません。データ構造が順序を保持するかどうかを検証するために反例を使うには、テストベクターが壊れるまで繰り返し試す以外に何か信頼できる方法があるでしょうか?
P.S. 私はこれをここに置いておきます。 参照 : "The OrderedDict constructor and update() method both accept keyword arguments, but their order is lost because Python's function call semantics pass-in keyword arguments using a regular unordered dictionary"
P.P.S : 将来、OrderedDictがkwargsの順序も保持するようになることを期待します(例1)。 http://bugs.python.org/issue16991
どのように解決するのですか?
OrderedDictはアクセスできるすべての順序を保持します。 初期化するために順序付けられたデータを渡す唯一の方法は、最後の 2 つの例のように、キーと値のペアのリスト (または、より一般的には iterable) を渡すことです。 リンク先のドキュメントにあるように、キーワード引数やdict引数を渡した場合、OrderedDictはいかなる順序にもアクセスすることができません。
最後の例でリスト内包を使っても何も変わらないことに注意してください。 という違いはありません。
OrderedDict([(i,i) for i in l])
と
OrderedDict([('b', 'b'), ('a', 'a'), ('c', 'c'), ('aa', 'aa')])
. リスト内包が評価され、リストが作成され、それが渡されます。OrderedDictはそれがどのように作成されたのかについては何も知りません。
関連
-
Pythonの非常に便利な2つのデコレーターを解説
-
Python Decorator 練習問題
-
Python百行で韓服サークルの画像クロールを実現する
-
Python 可視化 big_screen ライブラリ サンプル 詳細
-
FacebookオープンソースワンストップサービスpythonのタイミングツールKats詳細
-
[解決済み] _tkinter.TclError: 表示名がなく、$DISPLAY環境変数もない。
-
[解決済み】Python regex AttributeError: 'NoneType' オブジェクトに 'group' 属性がない。
-
[解決済み】TypeError: 系列を <class 'float'> に変換することができません。
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み】Python 3.6+で辞書は順番に並びますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonの非常に便利な2つのデコレーターを解説
-
python string splicing.join()とsplitting.split()の説明
-
PythonはWordの読み書きの変更操作を実装している
-
python implement mysql add delete check change サンプルコード
-
Python LeNetネットワークの説明とpytorchでの実装
-
[解決済み】DataFrameのコンストラクタが正しく呼び出されない!エラー
-
[解決済み】ImportError: PILという名前のモジュールがない
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?
-
[解決済み】Flaskのテンプレートが見つからない【重複あり