私は以下の辞書を持っています:
colors = {
"blue" : "5",
"red" : "6",
"yellow" : "8",
}
辞書の最初のエントリにインデックスを付けるにはどうすればよいですか?
colors[0]
KeyError
明らかな理由でを返します。
私は以下の辞書を持っています:
colors = {
"blue" : "5",
"red" : "6",
"yellow" : "8",
}
辞書の最初のエントリにインデックスを付けるにはどうすればよいですか?
colors[0]
KeyError
明らかな理由でを返します。
回答:
Python 3.6までのPythonバージョンでは、辞書は順序付けられていません。エントリの順序を気にせず、とにかくインデックスでキーまたは値にアクセスしたい場合は、d.keys()[i]
andd.values()[i]
またはorを使用できます。d.items()[i]
。(これらのメソッドは、Python 2.xですべてのキー、値、またはアイテムのリストを作成することに注意してください。したがって、それらが複数回必要な場合は、パフォーマンスを向上させるためにリストを変数に格納してください。)
エントリの順序を気にする場合は、Python2.7以降でを使用できますcollections.OrderedDict
。またはペアのリストを使用します
l = [("blue", "5"), ("red", "6"), ("yellow", "8")]
キーによるアクセスが必要ない場合。(ところで、なぜあなたの数字の文字列なのですか?)
Python 3.7では、通常の辞書が順序付けられているため、使用する必要はありOrderedDict
ません(ただし、使用することはできます。基本的に同じタイプです)。Python 3.6のCPython実装にはすでにその変更が含まれていますが、言語仕様の一部ではないため、Python3.6では信頼できません。
d.iterkeys().next()
代わりにd.keys()[0]
を使用して、キーの1つを削除せずに検査します。辞書が巨大な場合、パフォーマンスの面で大きな違いが生じます。値とアイテムについても同じことが言えます。Python 2.7では、dictビューオブジェクトを
誰かがまだこの質問を見ている場合、現在受け入れられている回答は古くなっています。
Python 3.7 *以降、辞書は順序を保持します。つまり、辞書はcollections.OrderedDict
以前とまったく同じように動作するようになりました。残念ながら、辞書のkeys()
/にインデックスを付けるための専用の方法はまだないvalues()
ため、辞書の最初のキー/値を取得するには、次のように実行できます。
first_key = list(colors)[0]
first_val = list(colors.values())[0]
または代わりに(これにより、キービューがリストにインスタンス化されるのを回避できます):
def get_first_key(dictionary):
for key in dictionary:
return key
raise IndexError
first_key = get_first_key(colors)
first_val = colors[first_key]
n
-番目のキーが必要な場合は、同様に
def get_nth_key(dictionary, n=0):
if n < 0:
n += len(dictionary)
for i, key in enumerate(dictionary.keys()):
if i == n:
return key
raise IndexError("dictionary index out of range")
(* CPython 3.6にはすでに順序付きdictが含まれていますが、これは実装の詳細にすぎません。言語仕様には3.7以降の順序付きdictが含まれています。)
辞書の要素に取り組むことは、ロバに座って乗り心地を楽しむようなものです。
PythonのルールとしてDICTIONARYは無秩序です
もしあるなら
dic = {1: "a", 2: "aa", 3: "aaa"}
今、私が好きになったとしたらdic[10] = "b"
、それはいつもこのように追加されるわけではありません
dic = {1:"a",2:"aa",3:"aaa",10:"b"}
それはのようかもしれません
dic = {1: "a", 2: "aa", 3: "aaa", 10: "b"}
または
dic = {1: "a", 2: "aa", 10: "b", 3: "aaa"}
または
dic = {1: "a", 10: "b", 2: "aa", 3: "aaa"}
またはそのような組み合わせ。
したがって、経験則はDICTIONARYであり、順序はありません。
実際、私は本当に助けになる新しい解決策を見つけました。リストまたはデータセット内の特定の値のインデックスに特に関心がある場合は、辞書の値をそのインデックスに設定するだけです!:
ちょうど見る:
list = ['a', 'b', 'c']
dictionary = {}
counter = 0
for i in list:
dictionary[i] = counter
counter += 1
print(dictionary) # dictionary = {'a':0, 'b':1, 'c':2}
これで、ハッシュマップの機能により、エントリのインデックスを一定の時間でプルできます(別名、はるかに高速になります)
ああ、それは難しいものです。ここにあるのは、基本的に、各アイテムに2つの値です。次に、番号をキーとしてそれらに電話をかけようとしています。残念ながら、値の1つがすでにキーとして設定されています。
これを試して:
colors = {1: ["blue", "5"], 2: ["red", "6"], 3: ["yellow", "8"]}
これで、リストのようにインデックスが付けられているかのように、キーを番号で呼び出すことができます。リスト内の位置で色と番号を参照することもできます。
例えば、
colors[1][0]
// returns 'blue'
colors[3][1]
// returns '8'
もちろん、各色がどの場所にあるかを追跡する別の方法を考え出す必要があります。おそらく、各色のキーを値として格納する別の辞書を作成することができます。
colors_key = {'青':1、 '赤':6、 '黄色':8}
次に、必要に応じてカラーキーを検索することもできます。
colors [colors_key ['blue']] [0]は 'blue'を返します
そんな感じ。
そして、あなたがそれにいる間、あなたはキーとして数字の値を使って口述をすることができます、それであなたはあなたが必要ならばあなたの色を調べるためにいつでもそれらを使うことができます。
値= {5:[1、 '青']、6:[2、 '赤']、8:[3、 '黄']}
次に、(colors [colors_key [values [5] [1]]] [0])は「青」を返します。
または、リストのリストを使用することもできます。
幸運を!
dict
注文されていないので、できません。を使用.popitem()
して任意のアイテムを取得できますが、それによってdictから削除されます。