2017-10-11 74 views
0

列表和字典我有一个包含5个变量的列表,说:遍历平行

list2=[1,2,3,4,5] 

,我有字典的5键 - 值对的列表,这是我初始化为:

list1[i]= {"input1": 0, "input2": 0, "input3": 0, "input4": 0, "input5": 0} 

我要遍历字典和列表,这样在每次迭代中,我将用从列表中值的字典键的值,因此字典将变为:

list1[i]= {"input1": 1, "input2": 2, "input3": 3, "input4": 4, "input5": 5} 

目前,我用它来遍历字典和列表:

def Get_Param(self): 
    self.list1=[] 
    inputcount=0 
    for line in self.textBox.get('1.0', 'end-1c').splitlines(): 
     if line: 
      self.list1.append({'input1':0, 'input2':0, 'input3': 0, 'input4': 0, 'input5': 0}) 
      list2=[int(i) for i in line.split()] 
      for parameter, value in zip(self.list1[inputcount], list2): //exception is thrown here 
       self.list1[inputcount][parameter]=value 
     inputcount+=1 

但它一直返回“列表索引必须是整数,不是Unicode”异常。任何人都可以提出一个更好的主意来做到这一点,或告诉我,我做错了哪部分代码?

+5

你应该避免使用定义的值,比如'dict'作为变量名称 - 在你的情况下'dict'初始化为什么?注意'dict [i]'不清楚'dict'实际是什么。 – metatoaster

+0

本来我宣布字典= [],反正快译通这里只是举例的目的,我用我的代码 – Reza

+2

注意其他变量名'dict'是没有顺序的,所以你可能有意想不到的结果... – Julien

回答

0

您可以通过简单地创建两个列表(键和关联值),并使用字典理解他们加入到您的最终字典减少很多无关的代码。这解决了尝试将有序列表映射到无序字典上的问题。

def Get_Param(self): 
    self.list1 = [] 
    dict_keys = ['input1', 'input2', 'input3', 'input4', 'input5'] 
    for line in self.textBox.get('1.0', 'end-1c').splitlines(): 
     if line: 
      list2 = [int(i) for i in line.split()] 
      self.list1.append({key: value for key, value in zip(dict_keys, list2)}) 
+0

这很好地解决了我的问题,并且感谢让我的代码看起来不那么杂乱 – Reza

-1

你可以参考这个解决方案和定制解决你的问题:

list1=[1,2,3,4,5] 
dict1= {"input1": 0, "input2": 0, "input3": 0, "input4": 0, "input5": 0} 

d = {} 
for i in dict1: 
    d[i] = list1[int(i.replace("input",''))-1] 
print d 

输出:{ '输入2':2, '输入3':3, '输入1':1, '输入4':4, 'input5':5}

+0

不解决字典未排序的问题,而OP正在尝试将有序列表映射到无序字典。 –

+0

如果您使用的是字典索引号,例如输入,那么这个解决方案将起作用 –

0

您可以zip您的字典按列表排序并生成新的dict。这与列表和字典中的数字相匹配。

>>> list2=[1,2,3,4,5] 
>>> list1=[{"input1": 0, "input2": 0, "input3": 0, "input4": 0, "input5": 0}] 
>>> dict(zip(sorted(list1[0].keys()), list2)) 
{'input4': 4, 'input1': 1, 'input5': 5, 'input2': 2, 'input3': 3} 

字典本身没有排序,但索引匹配。你甚至不需要拨打keys()。没有它,它仍然会工作。

这说明如何建立一个单一的字典。要创建它们的列表,只需在循环中执行此操作。