この質問に対する多くの回答にもかかわらず、辞書は順序付けられていないマッピングであることを指摘している人はほとんどいないため、(Python 3.7で挿入順序が祝福されるまで)文字どおりに作成された辞書の「最初の」エントリのアイデアも意味ない。またOrderedDict
、mydict[mydict.keys()[0]]
(Python 3ではkeys()
添え字なしのイテレータであるため、Python 2のみのような醜さを使用して数値インデックスでのみアクセスできます。)
3.7以降および実際には3,6でも-新しい動作が導入されましたが、3.7まで言語仕様の一部として含まれていませんでした-dictのキー、値、または項目の反復(そして、私は、 set)も、最初に最も最近に挿入されたオブジェクトを生成します。挿入の数値インデックスによってそれらにアクセスする簡単な方法はまだありません。
アイテムの選択と「フォーマット」の問題に関して、辞書で取得するキーがわかっている場合は、通常、そのキーを添え字として使用してキーを取得します(my_var = mydict['Apple']
)。
エントリ番号で項目にインデックスを付けることが本当に必要な場合(挿入が行われると特定のエントリの番号が変わるという事実を無視して)、適切な構造はおそらく2要素のタプルのリストになります。の代わりに
mydict = {
'Apple': {'American':'16', 'Mexican':10, 'Chinese':5},
'Grapes':{'Arabian':'25','Indian':'20'} }
あなたが使うかもしれません:
mylist = [
('Apple', {'American':'16', 'Mexican':10, 'Chinese':5}),
('Grapes', {'Arabian': '25', 'Indian': '20'}
]
この体制では、最初のエントリはmylist[0]
古典的なリストで終了した形式であり、その値は('Apple', {'American':'16', 'Mexican':10, 'Chinese':5})
です。次のようにリスト全体を反復できます。
for (key, value) in mylist: # unpacks to avoid tuple indexing
if key == 'Apple':
if 'American' in value:
print(value['American'])
しかし、「Apple」というキーを探していることがわかっている場合は、代わりにdictを使用しないのはなぜですか。
キーのリストをキャッシュすることで、間接参照のレベルを追加することもできますが、2つのデータ構造を同期させておくことの複雑さは、必然的にコードの複雑さを増します。