【问题标题】:Iterate over list and dict in parallel并行迭代列表和字典
【发布时间】:2018-03-22 15:32:40
【问题描述】:

我有一个包含 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”异常。谁能提出一个更好的主意或告诉我我在代码的哪一部分做错了?

【问题讨论】:

  • 您应该避免使用已定义的值,例如 dict 变量名称 - 在您的情况下,dict 初始化为什么?注意dict[i] 不清楚dict 实际上是什么。
  • 原来我声明了dict=[ ],反正这里的dict只是为了举例,我在代码中使用了其他变量名
  • 请注意,dict 没有排序,因此您可能会得到意想不到的结果...
  • i的值是多少?
  • i 当然是一个整数,我没有包含其余代码以保持问题简短

标签: python python-2.7 list dictionary iteration


【解决方案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}

【讨论】:

  • 没有解决字典无序的问题,OP正在尝试将有序列表映射到无序字典。
  • 如果您通过 dict 键号(即 input)引用列表索引,则此解决方案将起作用
【解决方案2】:

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

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

【讨论】:

  • 这很好地解决了我的问题,感谢您让我的代码看起来不那么混乱
【解决方案3】:

你可以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()。没有它它仍然可以工作。

这显示了如何构建单个字典。要创建它们的列表,只需循环执行此操作即可。

【讨论】:

    猜你喜欢
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多