2015-11-12 57 views
7

辞書をPythonのリストに変換する方法を知っていますが、何とか結果のリストの合計を取得しようとすると、エラー'dict_values' object is not subscriptableが返されます。また、私はリスト内のいくつかの項目だけを合計する予定です。 Python:サブスクリプト可能な配列に辞書を変換する方法は?

dict={A:1, B:2, C:3, D:4} 
list=dict.values() 
SUM=sum(list[1:3]) 

は、精密検査の際、私は結果のリストがプリントアウトされたとき、それは常に私が削除することはできません出力として dict_values(......)を与えることに気づきました。これをどうやって回避するのですか?

+0

ここでは注意が必要です。書かれているように、この式から得られる値を知る方法はありません。例えば2番目と3番目の値が保証される方法がないので、答えは「3」、「4」、「5」、「6」または「7」(1つの実行から次の実行に変わる可能性があります) dictが順序付けされていないためです。 – mgilson

+0

私の実際の辞書には、値がすでに順番に書き込まれています。だから、それをリストに変換して、すべてが順番になっていることを確認しないだろうか? – quotable7

+2

いいえ。ほとんどの場合、要素を要素に書き込む順序は関係ありません。要素は完全に異なる順序で戻ってくることがあります。あなたが注文を保存する場合は、 'collections.OrderedDict'を必ず使用してください。 – mgilson

答えて

13

in python-3.X dict.valuesでは、python-2.Xのようにlistを返しません。 python-3.xでは、dict-valueオブジェクトを返します。このオブジェクトは、set-likeオブジェクトであり、アイテムを格納するためのハッシュテーブルを使用します。この機能は、最も多くの属性をサポートするだけでなく、メンバーシップチェック(inオペレータを使用)のようないくつかの操作に対して最適化されています。そのため、インデックス作成はサポートされていません。

リストオブジェクトを取得する場合は、リストに変換して結果をlist()関数に渡す必要があります。

values = dict.values() 
SUM = sum(list(values)[1:10]) 

また、変数名としてpythonビルトイン名を使用しないでください。

+0

それはエラー 'TypeError: 'dict_values'オブジェクトは呼び出し可能ではない'を与えています。 –

+0

@VishnuUpadhyay 'values = dict.values()'を使いましたか?私はあなたの変数名として '組み込み'名前を使用しないことに言及しました。 – Kasramvd

+1

それは私のためにうまくいく... – quotable7

1

はい、ここで質問された古いPythonの質問のリストのように見えました。しかし、@ Kasramvd氏によると、Python 3.Xを使用していると仮定すると、dict.valuesは辞書ビューオブジェクトです。 (4つの辞書項目があるが、冗長な10個のリスト項目が必要なので、この例題は間違いなく思いついた。)

+1

ディクショナリ・ビュー・オブジェクトが何であるかを指摘してくれてありがとう、ちょうどあなたがディクショナリにあるものを見ることができると思う。 – quotable7

3

dict.values()をリストに代入すると、リストu dict_values(オブジェクトかもしれない)として格納しているだけです。変換するにはlist=list(dict.values())を書いてください。今ではlistを印刷している間でも、dict_values(......)ではなく、リストの要素が表示されます。

また、Pythonのビルトイン名を変数名として使用しない場合は、コードの読み込み中に実行中や混乱の際に競合が発生する可能性があります。

0

@ mgilsonです。辞書は、その本来の性質上、順序付けられていません。

まだあなたがこれを行うことができます:

alpha = {"A":1,"B":2,"C":3,"D":4,"E":5} # dictionary 
my_list = [] 
for key,value in alpha.items() : 
    my_list.append(value) 

あなたはmy_listからあなたの「値」にアクセスすることができ、それがためになりません。

関連する問題