【问题标题】:How to match multiple json with multiple value in python如何在python中将多个json与多个值匹配
【发布时间】:2022-01-25 09:25:48
【问题描述】:

我有三个 json 并希望将其中三个组合成各自的值。

jsonlistA = { "header1": "Hello World1", "header2": "Hello World2", "header3": "Hello World3"}

jsonlistB = { "condition1": "halo1", "condition2": "halo2", "condition3": "halo3"}

jsonlistC = { "parameter1": "hi1", "parameter2": "hi2", "parameter3": "hi3"}

我想要达到的目标

我希望它将 json 列表 a、b、c 与来自三个不同列表的三个值配对。例如 header1,condition1,parameter1 应该是一个列表 eg.

jsonCombineA = { "header1": "Hello World1", "condition1": "halo1","parameter1": "hi1"}

所以当我将 json 打印为字符串时,它应该是 HelloWorld1 halo1 hi1

【问题讨论】:

  • 到目前为止你尝试过什么?

标签: python json dictionary


【解决方案1】:

我想你正在寻找 zip 方法

a = b = c = range(20)
list(zip(a, b, c))

在您的情况下,只是从 dict 中获取值。

a = jsonlistA.values()
...

【讨论】:

    【解决方案2】:

    这是zip的解决方案

    通过在列表的键上使用zip,它返回这个

    ('header1', 'condition1', 'parameter1')
    ('header2', 'condition2', 'parameter2')
    ('header3', 'condition3', 'parameter3')
    

    现在我们可以得到想要的输出了

    jsonlistA = { "header1": "Hello World1", "header2": "Hello World2", "header3": "Hello World3"}
    jsonlistB = { "condition1": "halo1", "condition2": "halo2", "condition3": "halo3"}
    jsonlistC = { "parameter1": "hi1", "parameter2": "hi2", "parameter3": "hi3"}
    
    for keys in zip(jsonlistA.keys(), jsonlistB.keys(), jsonlistC.keys()):
        print(f"{jsonlistA[keys[0]]} {jsonlistB[keys[1]]} {jsonlistC[keys[2]]}")
    

    【讨论】:

      【解决方案3】:

      您可以 zip dict.items 每个 dict 的对象并在列表推导中使用 dict 构造函数:

      jsonCombineA, jsonCombineB, jsonCombineC = [dict(tpl) for tpl in zip(jsonlistA.items(), jsonlistB.items(), jsonlistC.items())]
      

      输出:

      print(jsonCombineA)  # {'header1': 'Hello World1', 'condition1': 'halo1', 'parameter1': 'hi1'}
      print(jsonCombineB)  # {'header2': 'Hello World2', 'condition2': 'halo2', 'parameter2': 'hi2'}
      print(jsonCombineC)  # {'header3': 'Hello World3', 'condition3': 'halo3', 'parameter3': 'hi3'}
      

      【讨论】:

        【解决方案4】:

        无论你改变字典中数据的顺序,它都会起作用:

        import re
        
        jsonlistA = {"header1": "Hello World1",
                     "header2": "Hello World2",
                     "header3": "Hello World3"}
        jsonlistB = {"condition1": "halo1",
                     "condition2": "halo2",
                     "condition3": "halo3"}
        jsonlistC = {"parameter1": "hi1",
                     "parameter2": "hi2",
                     "parameter3": "hi3"}
        
        data = []
        for i, j in jsonlistA.items():
            number = re.search(r'[\d]+$', i)
            if number:
                number = number.group()
                key1, key2 = f"condition{number}", f"parameter{number}"
                data.append({i: j, key1: jsonlistB[key1], key2: jsonlistC[key2]})
        
        [{'header1': 'Hello World1', 'condition1': 'halo1', 'parameter1': 'hi1'},
         {'header2': 'Hello World2', 'condition2': 'halo2', 'parameter2': 'hi2'},
         {'header3': 'Hello World3', 'condition3': 'halo3', 'parameter3': 'hi3'}]
        

        【讨论】:

          【解决方案5】:

          我想这就是你要找的东西:

          jsonlistA = {"header1": "Hello World1", "header2": "Hello World2", "header3": "Hello World3"}
          jsonlistB = {"condition1": "halo1", "condition2": "halo2", "condition3": "halo3"}
          jsonlistC = {"parameter1": "hi1", "parameter2": "hi2", "parameter3": "hi3"}
          
          jsonCombine = []
          for data in zip(jsonlistA.items(), jsonlistB.items(), jsonlistC.items()):
              jsonCombine.append({i[0]: i[1] for i in data})
          jsonCombineA = jsonCombine[0]
          jsonCombineB = jsonCombine[1]
          jsonCombineC = jsonCombine[2]
          

          顺便说一句,这些不是“JSON 列表”,它们被称为dict

          【讨论】:

            猜你喜欢
            • 2012-04-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-10-05
            • 1970-01-01
            • 2021-12-29
            • 2021-06-05
            相关资源
            最近更新 更多