2016-05-20 3 views
-2

ここに私のコードです。私は多くのdefaultdictsを作成するための名前のリストを構築しようとしています。次に、これらのデフォルトのディクテーションを関数を呼び出すことによって変更したいと思います。 コメントのように問題があります。関数呼び出しで辞書を修正するPython

#!/usr/bin/python                        

from collections import defaultdict 

class Stats(object): 
    def __init__(self, name, namedict): 
     self.name = name 
     self.namedict = namedict 
    def update_stats(self, playerdict): 
    self.playerdict = playerdict 
     playerdict['HR'] += 1 
     return(playerdict) 


l = ['a', 'b', 'c'] 

for x in l: 
    d = x + 'dict' # trying to make a list of dict names 
    print "Name is",d # it is a string so far 
    d = defaultdict(int) # now it is a dict but what is its name? 
    print d # i have a structure here but don't know its name 

stats = Stats('stats',d) 

# next test code block does not work 

#for k,v in adict.iteritems(): # adict not defined!               
# print k,v                         

# next code block does not work either 
for y in l: 
    dictname = y + 'dict' 
    dictname = stats.update_stats(**dictname)  
# it thinks dictname is a  String 
# in general what is the right way to pass in a dictionary 
# and get it back in a modified state? 
+0

あなたのコードadict = {}に定義されている辞書はありませんか?たぶんこれはあなたを起動させることができますhttp://www.tutorialsp.com/jp/python/python_dictionary.htm – glls

+0

混乱は、他の言語では、より緩慢ですが、それはループの内部に文字列を構築し、それらを新しい辞書にすることはOKです名前。私は、ループの中で、文字列のadict、bdictなどを作成し、新しいdictを初期化すると同時に、それらを新しいdictに割り当てようとしていました。 –

答えて

1

私はあなたが可変的な使用について混乱していると思います。 "name"は辞書の属性ではありません。キーと関連する値があります。変数をディクショナリを参照させることはできますが、このプロパティはディクショナリ固有のものではありません。

私はadictbdict、およびcdictという名前の変数によって参照さ、あなたは新しい辞書を作成することを収集します。 3つの辞書は今

dict_shelf = [] 
for i in range(3): 
    dict_shelf.append(defaultdict(int)) 

:これを行うには、あなたがループ内でそれらを処理する場合は、あなたがその要素の辞書ですリストが必要になります

adict = defaultdict(int) 
bdict = defaultdict(int) 
cdict = defaultdict(int) 

のようなものが必要になりますdict_shelf [0]、dict_shelf [1]、およびdict_shelf [2]。

これは問題を処理しますか?

+0

ありがとうございます、辞書のリストが働いた。 –

+0

確かに。ある時点で回答を「受け入れる」ことを覚えておいてください。両方の回答の一部が好きな場合は、自分で3番目の回答を書いて* 1を受け入れることもできます。 – Prune

1

説明が必要な誤解があるようです。あなたが書く

d = x + 'dict' 

あなたと、そして、(例えば'adict')文字列に

をラベルdを割り当てる:

d = defaultdict(int) 

あなたには、いくつかのdefaultdictにラベルdを再割り当て。これはもはや文字列に割り当てられません。

次に、ラベルadictにアクセスしようとしました。これは一度も定義されていません(割り当てられています)。衣装の中には文字列'adict'がありましたが、それは文字列(メモリ内のオブジェクト)であり、ラベルではありませんでした。

関連する問題