从python中的对象返回多个实例

从python中的对象返回多个实例,python,dictionary,optimization,Python,Dictionary,Optimization,毫无疑问,以前有人问过这个问题,但我不完全确定如何寻找它(因为我不知道它叫什么)。所以要提前道歉 唉,我的问题是我有大量的对象 for i in range(1000): M = subParts[0].get(parts['thing'][i]) 每个M都是一个对象,其中包含有关此模型的大量信息,现在我的工作是在此对象上调用四个单独的函数,以便这些函数可以返回四个简单的数字,如下所示: for i in range(1000): M = subParts[0].get(par

毫无疑问,以前有人问过这个问题,但我不完全确定如何寻找它(因为我不知道它叫什么)。所以要提前道歉

唉,我的问题是我有大量的对象

for i in range(1000):
    M = subParts[0].get(parts['thing'][i])
每个
M
都是一个对象,其中包含有关此模型的大量信息,现在我的工作是在此对象上调用四个单独的函数,以便这些函数可以返回四个简单的数字,如下所示:

for i in range(1000):
    M = subParts[0].get(parts['thing'][i])
    M.getItem1()
    M.getItem2()
    M.getItem3()
    M.getItem4()
每个都返回一个数字,例如

4.5
5.7
3.7
2.9
因此,我的问题是,什么是有效的方法?上述方法虽然很难看但有效,但必须有更有效的方法。在此基础上,我只想将全部内容存储在字典中

myDict = { 0 : [4.5,5.7,3.7,2.9], ... , 999 : [2.5,3.7,5.7,2.9] }

谢谢。

假设
parts['thing']
是一个可以迭代的有序序列,您可以使用
map
调用
子部分[0]。在
parts['thing']
的每个元素上获取
,这样就可以像这样迭代每个
M
对象:

def getdata(m):
    return [m.getItem1(), m.getItem2(), m.getItem3(), m.getItem4()]

myDict = {i: getdata(subParts[0].get(parts['thing'][i])) for i in range(1000)}
for M in map(subParts[0].get, parts['thing']):
    ...
注意,这将返回python 2中的列表,因此最好使用
itertools.imap

要将其转化为听写理解,您只需执行以下操作:

stuff = {i:[M.getItem1(),
            M.getItem2(),
            M.getItem3(),
            M.getItem4()]
         for i,M in enumerate(map(subParts[0].get, parts['thing']))}

一本字典的键是从
0
开始的序列号,它本质上只是一个列表。它只是为了演示:)当然你是正确的。我注意到你检索
子部分[0]
部分['thing']
每一次迭代,提前存储它们可能是有意义的(
relevant_part=parts[“thing”]
)将简化该语句并减少重复查找。实际上,如果
parts[“thing”]
是一个(有序的)序列,则可以对映射中的M执行
(子部分[0]。get,parts[“thing”]):
对所有
M
对象进行迭代。对..这比我现在做的要聪明得多。感谢来自操作符的
导入attrgetter
方法似乎更优雅?为什么这不可取?它检索
M.getItem1
绑定方法,但不调用它,attrgetter不是为了这个目的,所以addi这一步并不容易。如果您正在检索像
M.Item1
这样的属性,那么使用
attrgetter
会非常完美,但是在这种情况下获取绑定方法的元组并没有帮助。