从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
会非常完美,但是在这种情况下获取绑定方法的元组并没有帮助。