gpt4 book ai didi

python - Python中如何通过类字典直接访问类实例

转载 作者:行者123 更新时间:2023-11-30 23:43:42 25 4
gpt4 key购买 nike

我需要一种通过 ID 号直接访问类实例的方法。

正如我试图解释的那样here ,我正在导入一个 .csv 文件,我想为 .csv 文件中的每一行创建我的类 Person() 的实例,另外我希望能够使用唯一标识符作为键直接访问这些实例存在于 .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)

现在我有了一个 person 实例的列表,即 persons,这已经很简洁了。但现在我需要使用 networkx 模块在这些人之间创建一个网络,并且我肯定需要一种直接访问每个人的方法(目前我的实例没有任何名称)。

例如,每个人都有一个名为“father_id”的属性,这是父亲的唯一ID。当前人口中没有父亲的人的“father_id”等于“-1”。

现在,为了将每个人与他/她的父亲联系起来,我会这样做:

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”。请记住,我需要多次进行这种直接访问,因此我需要一种非常有效的方法,而不是在列表中进行某种形式的搜索(还考虑到我的人口中有大约 150000 人) .

如果能在我的 Person() 类中实现类似字典功能的功能,每个实例的键都是唯一标识符,那就太棒了。这个唯一标识符已存在于我的 csv 文件中,因此我已将其作为每个人的属性。

一如既往地感谢您的帮助。另外请记住,我是一个完全的 Python 新手(你可能会知道......;))

最佳答案

只需使用字典即可​​:

persons_by_id = {p.id: p for p in persons}

这需要最新版本的 Python。如果您的不支持此语法,请使用以下语法:

persons_by_id = dict((p.id, p) for p in persons)

完成上述任一操作后,您可以通过 ID 找到此人,如下所示:

persons_by_id[id]

networkx 示例变为:

import networkx as nx 
G=nx.Graph()
for person in persons:
if person.father_id != -1:
G.add_edge(person, persons_by_id[person.father_id])

关于python - Python中如何通过类字典直接访问类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10639325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com