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

时间:2016-08-17 21:40:32

标签: 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(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] }

感谢。

2 个答案:

答案 0 :(得分:3)

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)}

答案 1 :(得分:1)

假设parts['thing']是一个可以迭代的有序序列,您可以使用mapsubParts[0].get的每个元素上调用parts['thing'],以便迭代每个M for M in map(subParts[0].get, parts['thing']): ... 1}}对象可以这样做:

itertools.imap

请注意,这将在python 2中返回一个列表,因此最好使用stuff = {i:[M.getItem1(), M.getItem2(), M.getItem3(), M.getItem4()] for i,M in enumerate(map(subParts[0].get, parts['thing']))}

要把它理解为dict理解你会这​​么做:

$(document).ready(function() {
  $("div.jsonInfo").hide(); // it's obvious
  $("button.showJSON").click(function() {  // on click...
    
    $("div.jsonInfo")
      .hide()  // ...hide all other previus opened elements...
      .eq($(this).index('.showJSON')) // ... select right one by index of clicked .showJSON element...
       .toggle(); // and show/hide it
  });
});