これは私のコードです:
{names[i]:d.values()[i] for i in range(len(names))}
しかし、python 3.2.3を使用すると、'dict_values'オブジェクトはインデックスをサポートしていません
というエラーが表示されます。 3.2.3に対応させるためには、どのようにコードを修正すればよいでしょうか?
Python 3 では dict.values()
メソッドは Python 2 のようなリストではなく、辞書ビューオブジェクト を返します。辞書ビューは長さを持ち、反復することができ、メンバシップテストをサポートしますが、インデックス作成はサポートしません。
あなたのコードを両方のバージョンで動作させるためには、これらのいずれかを使用することができます:
{names[i]:value for i,value in enumerate(d.values())}
or となります。
values = list(d.values())
{name:values[i] for i,name in enumerate(names)}
どちらのバージョンでも同じことをするには、圧倒的にシンプルで最速の方法があります:
dict(zip(names, d.values()))
しかし、これらの方法はすべて d
の実際の内容によって結果が異なることに注意してください。これを克服するために、代わりに OrderedDict を使用することができます。これは、キーが最初に挿入された順番を記憶しているので、 values()
メソッドが返す順番を当てにすることができるかもしれません。