42

Pythonディクショナリからキーインデックスで値を取得したいと思います。このようなものを取得する方法はありますか?

dic = {}
value_at_index = dic.ElementAt(index)

ここindexで、は整数です

4

4 に答える 4

43

3.7より前のPythonバージョンでは、辞書は本質的に順序付けされていなかったため、実行しようとしていることは実際には意味がありません。

あなたが本当に、本当にあなたがしていることを知っているなら、使用してください

value_at_index = list(dic.values())[index]

Python 3.7より前では、要素を追加または削除すると、他のすべての要素のインデックスが変更される可能性があることに注意してください。

于 2013-02-27T14:43:56.173 に答える
14

辞書の例を見てみましょう。

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])
于 2018-12-25T16:41:26.803 に答える
9

使用可能なキー範囲からランダムな値が本当に必要な場合はrandom.choice、辞書の値を使用します(Python 3の場合はリスト形式に変換されます)。

>>> from random import choice
>>> d = {1: 'a', 2: 'b', 3: 'c'}
>>>> choice(list(d.values()))
于 2013-02-27T22:03:40.040 に答える
6

あなたができる間

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秒かかりました。

また、これはインデックスが負ではないことを前提としていることに注意してください

于 2015-07-24T21:49:43.867 に答える