Skip to main content
 首页 » 编程设计

python之在 python 中从 JSON 数据创建字典列表

2025年05月04日11webabcd

我想用 python 中的 json 值创建字典列表。 json数据为

{ 
  "data": [ 
    { 
      "date": "2017-07-28_15-54-10", 
      "name": "name1", 
      "state": "true" 
    }, 
    { 
      "date": "2017-07-29_15-54-10", 
      "name": "name2", 
      "state": "true" 
    } 
  ] 
} 

我想将这些数据放入包含字典数组(json 的“数据”部分)的字典数组(名称 1、名称 2、名称 3)中,类似于

[ 
  { 
    "name1": [ 
      { 
        "date": "2017-07-28_15-54-10" 
      }, 
      { 
        "state": "true" 
      } 
    ] 
  }, 
  { 
    "name2": [ 
      { 
        "date": "2017-07-28_15-54-10" 
      }, 
      { 
        "state": "true" 
      } 
    ] 
  } 
] 

我得到了所有的数据,我的代码是

for jn in data: 
    name = jn.get("name") 
    my_dict = {} 
    my_dict1 = {} 
    my_list = [] 
    my_dict["date"] = jn.get("date") 
    my_dict1["state"] = jn.get("state") 
    my_list.append(my_dict)   # dict for date 
    my_list.append(my_dict1)   # dict for state 
    my_name_dict = {} 
    my_name_dict[name] = my_list   # add the small dicts to  the "name" dict 
    my_final_array.append(my_name_dict) 
    print(my_final_array) 

我能够得到这个输出

  { 
    "name1": [ 
      { 
        "date": "2017-07-28_15-54-10" 
      }, 
      { 
        "state": "true" 
      } 
    ] 
  }, 
  { 
    "name2": [ 
      { 
        "date": "2017-07-28_15-54-10" 
      }, 
      { 
        "state": "true" 
      } 
    ] 
  } 

我正在努力将这些指令添加到列表/数组中。当我打印 my_final_array 的值时,我只得到字典的最后一行,而不是列表中的所有行。 我的代码也有点乱,请问还有其他办法吗?

请您参考如下方法:

使用简单的列表理解:

# if you are reading data from a file... 
import json 
 
path = "/path/to/json" 
d = json.load(open(path, "r")) 
 
# ...else 
d = { 
    "data": [ 
        { 
            "date": "2017-07-28_15-54-10",  
            "name": "name1",  
            "state": "true", 
        },  
        { 
            "date": "2017-07-29_15-54-10",  
            "name": "name2",  
            "state": "true", 
        } 
        ] 
    } 
 
records = [{x["name"]: [{"date": x["date"]}, {"state": x["state"]}]} for x in d["data"]] 
records 
 
>>> [{'name1': [{'date': '2017-07-28_15-54-10'}, {'state': 'true'}]}, 
 {'name2': [{'date': '2017-07-29_15-54-10'}, {'state': 'true'}]}] 

如果您计划向记录中添加更多键,可以通过获取除 name 之外的所有键来使此列表理解更通用,例如:

records = [ 
    {x["name"]: [{k: v} for k, v in x.items() if k != "name"]}  
    for x in d["data"] 
]