使用在函数之间格式化的其他值传递字典

时间:2013-11-28 10:47:18

标签: python file list file-io dictionary

我想传递整个字典的键,在循环中调用另外两个值,因此将逐行组合和打印。值将传递给另一个函数,但只传递整个字典的第一个值。我希望所有值都如下所示传递,以及其他变量。我会做什么,以便所有的值不仅仅传递一个。

这是我的代码:

class scoring:

   def values(self):
      dicts = {}
      inner_dict = {}
      with open("1.txt","r") as f:
         for line, score in zip(sys.stdin, f):
            d2  = ast.literal_eval(score)
            for key,v in d2.items():
               inner_dict = dicts.setdefault(key, {})
               inner_dict['s'] = v.get('s')
               sent = dicts[key]['s']
               binary = re.split("\s+", line.strip())[0]
               return key, sent, binary

   def score(self,key,sent,binary):
      <something>

if __name__ == "__main__":

   call = scoring()
   key,sent,binary = call.values()
   call.score(key,sent,binary)

2 个答案:

答案 0 :(得分:0)

我没有在python中进行过真正的编码,但我猜你是从内循环的第一次迭代返回的,这可能就是为什么其他值永远不会返回。您可以保存所有值列表,然后可以从列表中返回列表和访问值。

class scoring:

   def values(self):
      dicts = {}
      list = []
      inner_dict = {}
      with open("1.txt","r") as f:
         for line, score in zip(sys.stdin, f):
            d2  = ast.literal_eval(score)
            for key,v in d2.items():
               inner_dict = dicts.setdefault(key, {})
               inner_dict['s'] = v.get('s')
               sent = dicts[key]['s']
               binary = re.split("\s+", line.strip())[0]
               list.append((key, sent, binary))
      return key, sent, binary

   def score(self,key,sent,binary):
      <something>

if __name__ == "__main__":

   call = scoring()
   lst = call.values()
   for l in lst :
        call.score(l[0],l[1],l[2])

基本思想是做这样的事情:

lst = []
lst.append((1,2,3))
lst.append((4,5,6))
for l in lst :
   print l[0], l[1], l[2]

它会打印

1 2 3
4 5 6

答案 1 :(得分:0)

您的return语句位于两个for循环内。这意味着在return语句离开函数之前,您只需要经历一次循环。在没有更多信息的情况下,我可以提供这些帮助,因为您可能希望使用yield或创建列表或定义可由整个类引用的类属性。阶段提供更详细的期望输出。