質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1583閲覧

python 辞書で逆に表示される

dossy

総合スコア109

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/05/17 10:19

d = {'key1': 1, 'key2': 2, 'key3': 3} d = [1,2,3,4] for k in d: print k

このcodeはdをfor文でまわして表示させるものです。
これが、d = [1,2,3,4] のlistの時には => 1,2,3,4 と表示されます。

しかし、d = {"key1":1}のような辞書になると => key3,key2,key1と逆に表示されてしまいます。

どちらもforで回すだけなので、最初の要素から取り出すものかと思ったのですが、辞書はなぜか逆から取得します。

これはなぜなんでしょうか?
辞書は逆になる規約がそもそもあるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Python 3.6 未満であれば、dict のキーの順番は保持されません。
キーを挿入した順番を保持したい場合は collections.OrderedDict をお使いください。

python

1from collections import OrderedDict 2 3d = OrderedDict() 4d["key1"] = 1 5d["key2"] = 2 6d["key3"] = 3 7 8for k in d: 9 print k 10# key1 11# key2 12# key3

初期化時に中身を設定する場合

python

1from collections import OrderedDict 2 3d = OrderedDict(key1=1, key2=2, key3=3) 4 5for k in d: 6 print k

Python 3.6 以降であれば、通常の dict でもキーの挿入順が保持されます。

追記

すいません。回答した後に気づいたのですが、Python 2系だと OrderedDict は使えないですね。Python 2 はサポート切れてますし、バージョンを上げることをおすすめします。

collections --- コンテナデータ型 — Python 3.8.3 ドキュメント

投稿2020/05/17 10:31

編集2020/05/17 10:43
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ForestSeo

2020/05/17 10:36

dict のキーの順番は不定 だったら 毎回降順で出なくないですか?
dossy

2020/05/17 10:36

なるほど、自分のversionは2.7でした。 なので、辞書の順番は不定なのですね!! ありがとうございます。
tiitoi

2020/05/17 10:37

To: dossy さん すいません。Python 2だと OrderedDict も使えなかったです。
tiitoi

2020/05/17 10:40

To: H-Kazuki ご指摘ありがとうございます。 「不定」は適切でなかったので、修正しました。 ここで言いたかったことは、辞書のキーの挿入した順番は保持されないということです。
guest

0

Python

1d = {'key1': 1, 'key2': 2, 'key3': 3} 2d = [1,2,3,4] 3 4for k in d: 5 print k 6```でdに違うものを二回入れる意味がよくわかりませんが、 7```Python 8d = {'key1': 1, 'key2': 2, 'key3': 3} 9for k in d.keys(): 10 print(k) 11# key1 12# key2 13# key3 14```とかだったらこう出ますし、 15```Python 16ks = [1,2,3] 17for k in ks: 18 print(d['key' + str(k)]) 19# 1 20# 2 21# 3 22```普通に昇順ででますよ。問題の意図と違かったらすみません。 23----追記---- 24Python2なんですね。すみません。

投稿2020/05/17 10:35

編集2020/05/17 10:59
ForestSeo

総合スコア2720

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問