2011-01-30 10 views
3

"First"(First Name)のような辞書を作成して、関数で辞書に格納されている多数のファーストネームを保存したいとします。アイデアは、辞書は複数の名前をサポートすることができるということです、Python辞書 - 新しい値が以前の値を上書きしないようにするにはどうすればいいですか?

ので、ここでは私の問題である:私は辞書に名前を追加すると

が、その後、私は機能を介して第1を追加して行く、以前の名前はあります最後に上書きされます。これをどうやって修正するのですか?辞書内の辞書のようなものや入れ子の条件文が含まれていることはわかっています。ここに私のコードです:

+3

古い値を上書きするのではなく、正確に何をしたいですか? –

答えて

0

おそらくリストではなく、リストとして辞書を格納する必要があります。だから、あなたが持っているでしょう:

data['Names'] = {} 
data['Names']['first'] = [] #note the brackets here instead of curlies 
data['Names']['first'] = [value1, value2] 

をインスタンス化した後1を追加するには、あなたが行うことができます:

data['Names']['first'].append(another_first_name) 

リストはゼロインデックスされている、第一最初の名前を取得するので、あなたが言うことができます。

リスト内
data['Names']['first'][0] 
+1

'()'はリストではなくタプルを作成します。タプルは不変であるため、このためには使用できません。リストを使用してください。すなわち、 '()'の代わりに '[]'を使用してください – ThiefMaster

+0

これは私が3:30にコメントするために得たものです。顔を叩いてくれてありがとう。私はその投稿を修正した。 – Jordan

+0

うん? 'data '' ['first'] + =(another_first_name、)' :) –

4

電源を入れdata['Names']['first']し、それに追加:

data['Names'] = {} 
data['Names']['first'] = [] 

def store(data, value): 
    data['Names']['first'].append(value) 
+0

'{value}'がPython 3のセットだった場合、 'data ['Names'] = set 'append'の代わりに'() 'と' add'もオプションです。 'data ['Names'] = defaultdict(set)'もオプションで、 'set()'を使って名前の各要素を初期化する必要はありません。 –

+0

{}もPython 2.7でも動作します。 –

1

collections.defaultdictをご覧ください。しかし、あなたがあまりにも普通のdictとで同じことを達成することができ、defaultdictを持っていない

from collections import defaultdict 

data['Names'] = defaultdict(list) # Or pass set instead of list. 
data['Names']['first'].append("Bob") 
data['Names']['first'].append("Jane") 
data['Names']['last'].extend("T", "Mart") 
2

Pythonの< 2.5:次に、あなたのようなことを行うことができます。キーが既に辞書に存在する、または新しい値を設定し、キーが存在しない場合は、新たに設定された値を返す場合

>>> names = {} 
>>> name_list = [('Jon', 'Skeet'), ('Jeff', 'Atwood'), ('Joel', 'Spolsky')] 
>>> for first, last in name_list: 
     names.setdefault('first', []).append(first) 
     names.setdefault('last', []).append(last) 
>>> print names 
{'first': ['Jon', 'Jeff', 'Joel'], 'last': ['Skeet', 'Atwood', 'Spolsky']} 

setdefaultは、既存の値を返します。

関連する問題