我有一个包含5个变量的列表,例如:
list2=[1,2,3,4,5]
我有一个包含5个键值对的dict列表,我初始化为:
list1[i]= {"input1": 0, "input2": 0, "input3": 0, "input4": 0, "input5": 0}
我想遍历dict和list,以便在每次迭代中,我将使用列表中的值替换dict中键的值,因此dict将变为:
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"例外。任何人都可以提出一个更好的想法,或者告诉我代码的哪一部分我做错了吗?
答案 0 :(得分:0)
您可以使用列表zip
您的dicts排序键并生成新的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}
dict本身没有排序,但索引匹配。你实际上甚至不需要调用keys()
。没有它它仍然可以工作。
这显示了如何构建单个字典。要创建它们的列表,只需在循环中执行此操作。
答案 1 :(得分: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)})
答案 2 :(得分:-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
输出:{'input2':2,'input3':3,'input1':1,'input4':4,'input5':5}