2012-01-18 11 views
1

ちょうどPythonを始め、他のデータ構造、リスト、セットなどの中にdictを入れ子にしようとしています。私がdictを入れ子にしたとき(私がdictsのリストを作成した場合)個人の中のキーまたは値はもう何も言いません。これは設計上の特徴ですか、それとも私はそれを完全に果たしていますか?初心者のPythonの問題

+1

+1「基本」タグの画期的な使用。 – Azodious

+1

ようこそ!私たちが手助けできるように、あなたが試したことのあなたの記事とあなたが遭遇したエラーといくつかのコードを含めてください。あなたはもっと良い答えを得るでしょう。 –

+0

ネストされたdicts(または他のオブジェクト)はアクセス可能です。あなたがコマンドラインでそれをプレイすると、おそらくそれを理解することができます。がんばろう! – monkut

答えて

4

これは絶対にPythonで行うことができます。 []演算子は複数回使用できます。aがリストの場合は、a[0]が最初の要素です。最初の要素がdictである場合、a[0].keys()でそのキーを見ることができ、次のような値を得ることができます:a[0]["here's a key"]

そして、このような辞書のキーをループするのと同じように:

for key in my_dict: 
    # get the value 
    val = my_dict[key] 
    # do something with it 

あなたはそれを辞書であることを起こる場合は、リストの要素を使用することができます。

for key in a[0]: 
    # get the value 
    val = a[0][key] 
    # do something with it 

あなたはリスト、dictsのリスト、または値であってもdictsのリストを作ることができますリスト(またはそれ以上のdicts)、かなり簡単に。それらを参照するには、値を反復するか、必要に応じて操作を連結します([])。

あなたが行うことができない唯一のことは、のキーと別のdictにリストまたはディクテーションを使用することです。 のうちの1つは、という辞書のキーは、の不変のでなければならないということです。数字はOK、文字列はOK、タプルはOKですが、リストと辞書はありません。

ここでdictsのリストを構築し、再びそれらの値を抽出する方法をお見せするために、対話型のコードのサンプルです:

# Here's a dictionary 
a = { 'key1': 'value1', 'key2': 2 } 

# Check it out 
>>> type(a) 
<type 'dict'> 

# Print it: 
>>> a 
{'key1': 'value1', 'key2': 2} 

# Look inside 
>>> a['key1'] 
'value1' 

# Here's another one 
b = { 'abc': 123, 'def': 456 } 

# Now let's make a list of them 
c = [a, b] 

# Check that out, too 
>>> type(c) 
<type 'list'> 

# Print it: 
>>> c 
[{'key1': 'value1', 'key2': 2}, {'def': 456, 'abc': 123}] 

>>> c[0] 
{'key1': 'value1', 'key2': 2} 

# Dig deeper 
>>> c[0]['key1'] 
'value1' 
+0

これまでで最も速く、最も驚くべき答えです。これは完全な教育ではありません。本当にありがとう。 –

+0

技術的には、辞書のキーは*不変*でなく*ハッシュ可能でなければなりません。たとえば、 'list'をサブクラス化して' __hash__'メソッドを追加すると、そのインスタンスをdictキーとして使うことができます。 – yak

+0

@billbixby:StackOverflowへようこそ。 「ありがとうございました」は、「答えの左側にあるチェックボックスの概要をクリックすることで最もよく表現されます」(http://stackoverflow.com/faq#howtoask)。 – Johnsyweb

2

あなたが(そのことについてまたはネストされたもの)dictsを入れ子にしたら、あなたは外側のリストに必要なdictのインデックスを、次に必要なアイテムのインデックスを指定する必要があります。リストにカップルのdictsを持っていたのであれば、:

list_of_dicts = [{'a':1,'b':2,'c':3},{'d':4,'e':5,'f':6}] 

を第二辞書の要素の「e」にアクセスするために、次のように入力します。list_of_dicts[1]['e']

0
x = [{"a":1},{"b":2}] 
>>> x[1]["b"] 
2 
1

をいくつかのことに触れてするには、次の

  1. リストに辞書を追加する。セットにリストを追加する

    mylist = []

    mylist.append({'key1': 'val1'})

  2. 。別個の辞書の

    myset = set()

    myset.add({'key1': 'val1'}) # Error - dicts are mutable, therefore not hashable.

  3. 保持トラック。要素を取得

    mydicts = set([id(d) for d in mylist])

  4. # With Lists

    mylist[0]['key1']

    # With Sets

    mydicts[0] # Error - sets do not support indexing.

-1

私はそれを行う方法を忘れてではなく、しばらく続けるので、私は、何度もこの問題に遭遇してきました私は覚えています。
あなたが探しているのはおそらくインデックス[]です。インデックスは0から始まり、リストの長さから始まります。
コードは次のようになります。
print list_name[0]
印刷機能は必要ありません。角括弧内の0はインデックス番号です。それをあなたが望む任意の番号に変更することができます。私はこれ以上のように見えるよりも、ループのために使用しています:
for i in range(10): print list_name[i]
もう一度印刷機能は必要ではなく、range(10)を自由に変更することができます。

希望すると便利です。