2016-05-04 10 views
0

辞書は100個のクラスタオブジェクトがあり、クラスタには複数のメンバーオブジェクトがあり、それらを所属するクラスタに追加する必要があります。 、なぜ私は見つけることができません。ここでディクショナリ内の辞書内の要素を辞書内に追加する

self.clusters = {} 

with open('/tmp/numpy_dumps/kmeansInput.txt.cluster_centres') as f: 
    for line in f: 
     cluster = Cluster(line) 
     self.clusters[cluster.id] = cluster 

with open('/tmp/numpy_dumps/kmeansInput.txt.membership') as f: 
    for line in f: 
     member = Member(line, self.reps) 
     self.clusters[member.clusterId].members[member.imageId] = member 

for id, cluster in self.clusters.items(): 
    print(cluster) 
    print(cluster.members) 
    print('cluster {} has {} members'.format(id, len(cluster.members))) 

出力は、すべてのクラスタは、すべてのメンバー

+3

クラスタとメンバーのコードが表示されるはずです。 –

答えて

1

問題は、あなたのスニペットに投稿did'ntことを、非常に確かにClusterクラスであるを持っていることを私に語ったコードです。これはややこしい推測ですが、この動作は、共有属性、クラス属性または変更可能なデフォルト引数のいずれかの典型です。あなたのClusterクラスは、以下のスニペットのいずれかのように見える場合は検索しません:

# class attributes: 

class Cluster(object): 
    members = {} # this will be shared by all instances 

# solution: 

class Cluster(object): 
    def __init__(self): 
     self.members = {} # this will be per instance 



# default mutable argument: 

class Cluster(object): 
    def __init__(self, members={}): 
     # this one is well known gotcha: 
     # the default for the `members` arg is eval'd only once 
     # so all instances created without an explicit 
     # `members` arg will share the same `members` dict 
     self.members = members 

# solution: 

class Cluster(object): 
    def __init__(self, members=None): 
     if members is None: 
      members = {} 
     self.members = members 
+0

はい、それは、私はPythonにはかなり新しく、まだそれを見ていませんでした:) – SkarXa

+0

@SkarXa "それはそれでした" - でもどちらですか? –

+0

最初に、私の属性が__init__の外にありました – SkarXa