【问题标题】:Nested loop over indices when creating a dict value that is itself a dict创建本身就是字典的字典值时对索引进行嵌套循环
【发布时间】:2015-03-22 17:51:54
【问题描述】:

我正在遍历列表列表以创建字典字典,其中键是唯一的整数,值是包含联系信息的字典。列表列表中的第一个列表是嵌套字典的键。有没有办法嵌套循环而不是输入所有索引?如果有更多的信息列,这将变得很难。

all_employees_dict = {}
for index, each in enumerate(all_employees[1:]):
    all_employees_dict[index] = {
                                all_employees[0][0]:each[0], 
                                all_employees[0][1]:each[1],
                                all_employees[0][2]:each[2],
                                all_employees[0][3]:each[3],
                                all_employees[0][4]:each[4],
                                }

【问题讨论】:

    标签: python for-loop dictionary nested-loops


    【解决方案1】:

    是的,带有列表理解:

    all_employees_dict = {}
    for index, each in enumerate(all_employees[1:]):
        all_employees_dict[index] = {all_employees[0][j]:each_val for j, each_val in enumerate(each)}
    

    【讨论】:

      【解决方案2】:

      没有必要根据与列表 [0, 1, 2, 3...] 相似的索引来制作字典。所以:

      all_employees_dict = {}
      for index, each in enumerate(all_employees[1:]):
          all_employees_dict[index] = {
                                      all_employees[0][0]:each[0], 
                                      all_employees[0][1]:each[1],
                                      all_employees[0][2]:each[2],
                                      all_employees[0][3]:each[3],
                                      all_employees[0][4]:each[4],
                                      }
      

      可能就像:

      all_employees_dict = [{k: v for k, v in zip(all_employees[0], employee)} for employee in all_employees[1:]]
      

      但是你会得到一个list,你可以使用它的索引而不是带有键的dict

      【讨论】:

        【解决方案3】:

        您可以将 (key,value) 对的列表映射到这样的字典:

        >>> print dict([(1, 'a'), (2, 'b')])
        {1: 'a', 2: 'b'}
        

        鉴于此,您可以使用 zip 将第一个列表中的键与其余列表中的值配对:

        employee_keys = all_employees[0]
        result = {}
        for index, employee_values in enumerate(all_employees[1:]):
          result[index] = dict(zip(employee_keys, employee_values))
        

        要使用很酷的生成器表达式创建它,您可以这样做,它使用与以前相同的技术创建一个可迭代的给每个员工的 dict,然后依赖于 enumerate 创建 (index, value) 对 @ 987654325@就可以消费了。

        employee_keys = all_employees[0]
        result = dict(
          enumerate(
            dict(zip(employee_keys, employee_values))
            for employee_values in all_employees[1:]
          )
        )
        

        【讨论】:

          猜你喜欢
          • 2023-03-12
          • 1970-01-01
          • 2019-04-14
          • 2017-12-25
          • 1970-01-01
          • 2017-05-13
          • 1970-01-01
          • 2021-07-25
          • 2019-03-29
          相关资源
          最近更新 更多