環境
Pythonのバージョン: 2.7
やりたいこと
多次元の辞書式配列から書いた順を値を取り出したい。かつ、簡単に値を定義できる。
もうちょっと詳しく
以下のような適当な辞書式の配列があるとします。
(※以下に示すデータには全く意味がありません)
python
1sample_dict = { 2 "Device" : { 3 "os": ("ios", "android", "firefox", "ubuntu"), 4 "size": ("A", "B", "C") 5 }, 6 "Mode": { 7 "input": {"address", "mail", "tel"}, 8 "output": {"start_time", "end_time"}, 9 "update": { 10 "editor": {"title", "body"} 11 } 12 } 13}
このデータを書いた順番に取り出して行きたいのですが、辞書式なので書いた順に取り出せるとは限りません。
試しに、先の``sample_dict```を標準出力させると、次のようになります。
sh
1{'Device': {'os': ('ios', 'android', 'firefox', 'ubuntu'), 'size': ('A', 'B', 'C')}, 'Mode': {'input': set(['mail', 'tel', 'address']), 'update': {'editor': set(['body', 'title'])}, 'output': set(['start_time', 'end_time'])}}
末尾の記述が最初に書いた順番と異なります(仕様)。これは、当方がしたいこととは異なります。
試したこと
順序だった辞書式配列はどうやら作れるようで、ドキュメント(8.3.6. OrderedDict オブジェクト)に有るように、OrderedDictを試みました。
かりに、sample_dict
をOrderedDictで表現すると、
sample_dict = OrderedDict() device_data = OrderedDict() device_data["os"] = ("ios", "android", "firefox", "ubuntu") device_data["size"] = ("A", "B", "C") # Modeの方は省略 sample_dict["Device"] = device_data
というように、やや冗長な感じがします。
どのように知りたいか
頑張ればOrderedDict
で入力する値を定義できるのですが、なにせ書くのが面倒だなぁ、というのが正直なところです。このような経緯から質問しようと至ったわけです。
すなわち、いま達成したいことは、次の2点です。
- 順序だった辞書式配列(jsonでも可)でデータを定義したい
- 1.の時の定義をより簡潔にしたい。
もっとスマートに書く方法をご存知のかたいらっしゃいましたら、ご助力のほどよろしくお願いします。
質問の情報が不足しておりましたら、ご指摘下さい。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/05/07 02:26
2016/05/07 03:33