【问题标题】:Convert one dictionary to list of dictionaries将一本字典转换为字典列表
【发布时间】:2021-11-24 11:19:18
【问题描述】:

我需要将一个字典,其值在一个列表中的字典转换为一个字典列表。

例如,下面的字典:

only_dict = {'First': [1, 2], 'Second': [3, 4]}

应该有以下输出,其中值不再在列表中。

out_lst = [{'First': 1, 'Second': 3}, {'First': 2, 'Second': 4}]

【问题讨论】:

  • 你尝试了什么
  • 有什么要求? dict 可能有多少个键?您之前是否知道其他事实?如果不同的键有不相等大小的列表怎么办?
  • 这个输入{'First': [1, 2], 'Second': [3, 4, 5]}会发生什么?还有这个:{'First': [1, 2], 'Second': [3, 4], 'Third': [5, 6]}?
  • 值列表的长度总是相同的。
  • 那么,第二个选项? {'First': [1, 2], 'Second': [3, 4], 'Third': [5, 6]}

标签: python list dictionary


【解决方案1】:
[{"First": v[0], "Second": v[1]} for v in only_dict.values()]

【讨论】:

    【解决方案2】:

    这里是任意长度列表的通用版本:

    only_dict = {'First': [1,2,3], 'Second': [4,5,6], 'Third': [7,8,9]}
    [dict(zip(only_dict, val)) for val in only_dict.values()]
    

    输出:

    [{'First': 1, 'Second': 2, 'Third': 3},
     {'First': 4, 'Second': 5, 'Third': 6},
     {'First': 7, 'Second': 8, 'Third': 9}]
    

    【讨论】:

    • 不是 OP 试图达到相反的效果吗?比如:[dict(zip(only_dict, val)) for val in only_dict.values()]
    • @SayanipDutta 当然你是对的,非常感谢,我想我的大脑在我阅读问题和输入答案之间推动了它自己的想法^^无论如何,重要的部分是展示zip这里
    【解决方案3】:

    适用于任意长度列表的简单版本。首先,获取最大列表长度:

    count = max(*[len(x) for x in only_dict])
    

    一个一个地构造每个字典:

    out_lst = [{k: v[i] for k, v in only_dict.items() if len(v) >= i} for i in range(count)]
    

    【讨论】:

      【解决方案4】:

      一种基于初始字典总长度填充列表的简单方法。

      only_dict = {'First': [1, 2], 'Second': [3, 4]}
      out_dict = {index: {} for index in range(len(only_dict.keys()))}
      def fill(key, values):
          for index, val in enumerate(values):
              out_dict[index][key] = val
      [fill(key, val) for key, val in only_dict.items()]
      out_dict = list(out_dict.values())
      
      print(out_dict)
      

      打印输出

      [{'First': 1, 'Second': 3}, {'First': 2, 'Second': 4}]
      

      【讨论】:

        猜你喜欢
        • 2018-08-21
        • 1970-01-01
        • 2020-03-11
        • 1970-01-01
        • 1970-01-01
        • 2017-04-23
        • 2021-10-13
        • 1970-01-01
        相关资源
        最近更新 更多