Pythonディクショナリからキーインデックスで値を取得したいと思います。このようなものを取得する方法はありますか?
dic = {}
value_at_index = dic.ElementAt(index)
ここindex
で、は整数です
Pythonディクショナリからキーインデックスで値を取得したいと思います。このようなものを取得する方法はありますか?
dic = {}
value_at_index = dic.ElementAt(index)
ここindex
で、は整数です
3.7より前のPythonバージョンでは、辞書は本質的に順序付けされていなかったため、実行しようとしていることは実際には意味がありません。
あなたが本当に、本当にあなたがしていることを知っているなら、使用してください
value_at_index = list(dic.values())[index]
Python 3.7より前では、要素を追加または削除すると、他のすべての要素のインデックスが変更される可能性があることに注意してください。
辞書の例を見てみましょう。
numbers = {'first':0, 'second':1, 'third':3}
私がしたとき
numbers.values()[index]
エラーが発生しました:「dict_values」オブジェクトはインデックス作成をサポートしていません
私がしたとき
numbers.itervalues()
値を反復して抽出するには、エラーも発生します。「dict」オブジェクトには属性「iteritems」がありません。
したがって、辞書要素をタプルに変換するだけで、インデックスによって辞書要素にアクセスする新しい方法を思いつきました。
tuple(numbers.items())[key_index][value_index]
例えば:
tuple(numbers.items())[0][0] gives 'first'
値を編集したり、値を並べ替えたりする場合、タプルオブジェクトはアイテムの割り当てを許可しません。この場合、あなたは使用することができます
list(list(numbers.items())[index])
使用可能なキー範囲からランダムな値が本当に必要な場合はrandom.choice
、辞書の値を使用します(Python 3の場合はリスト形式に変換されます)。
>>> from random import choice
>>> d = {1: 'a', 2: 'b', 3: 'c'}
>>>> choice(list(d.values()))
あなたができる間
value = d.values()[index]
実行する方が速いはずです
value = next( v for i, v in enumerate(d.itervalues()) if i == index )
編集:最後にインデックスをチェックするlen 100,000,000のdictを使用してタイミングを合わせたところ、1st / values()バージョンは169秒かかりましたが、2nd / next()バージョンは32秒かかりました。
また、これはインデックスが負ではないことを前提としていることに注意してください