ID 番号を介してクラスのインスタンスに直接アクセスする方法が必要です。
ここで説明しようとしたように、.csv ファイルをインポートしていて、.csv ファイルのすべての行に対してクラス Person() のインスタンスを作成したいのに加えて、これらのインスタンスに直接アクセスできるようにしたいkey .csv ファイルに既に存在する一意の識別子。
user433831 の助けを借りて、これまでに行ったことは次のとおりです。
from sys import argv
from csv import DictReader
from person import Person
def generateAgents(filename):
reader = DictReader(open(filename, 'rU'))
persons = [Person(**entry) for entry in reader]
return persons
ここで、 person は、クラス Person() を次のように定義するモジュールです。
class Person:
def __init__(self, **kwds):
self.__dict__.update(kwds)
これで、個人インスタンスのリスト、つまりpersons
ができました。これは、すでにきちんとしています。しかし今、networkx
モジュールを使用して、これらの人々の間でネットワークを作成する必要があり、すべての人に直接アクセスする方法が絶対に必要です (現在、私のインスタンスには名前がありません)。
たとえば、すべての人は、父親の一意の ID である「father_id」という属性を持っています。現在の集団で父親が生存していない人は、「-1」に等しい「father_id」を持っています。
さて、すべての人を父親に結び付けるには、次のようにします。
import networkx as nx
G=nx.Graph()
for person in persons:
G.add_edge(person, person_with_id_equal_to_father_id)
私の問題は、この「person_with_id_equal_to_father_id」に直接アクセスできないことです。この直接アクセスを何度も行う必要があることを覚えておいてください。そのため、リスト内で検索する形式ではなく、かなり効率的な方法が必要になります (人口に約 150,000 人いることも考慮してください)。 .
私のクラス Person() に辞書機能のようなものを実装し、すべてのインスタンスのキーを一意の識別子にするのは素晴らしいことです。この一意の識別子は既に私の csv ファイルに存在するため、すべての人の属性として既に持っています。
いつも大変感謝しております。また、私はまったくの python 初心者であることを覚えておいてください (おそらくおわかりのように... ;))