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

从python中的JSON数据创建字典列表,python,dictionary,Python,Dictionary,我想从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" } ] } 我想将这些数

我想从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"
    }
  ]
}
我想将这些数据放入一个dict数组(name1,name2,name3),其中包含dict数组(json的“数据”部分),类似于

[
  {
    "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"
      }
    ]
  }
我正在努力将这些dict添加到列表/数组中。当我打印
my_final_array
的值时,我只得到dict的最后一行,而不是列表中的所有行。
我的代码也有点乱,还有其他方法吗?

你能试试下面的方法吗:

json_data = {
    "data": [
        {
            "date": "2017-07-28_15-54-10",
            "name": "name1",
            "state": "true",
        },
        {
            "date": "2017-07-29_15-54-10",
            "name": "name2",
            "state": "true",
        }
    ]
}
main_list = []
for val in json_data['data']:
    temp_dict = {}
    temp_key = val.pop('name')
    temp_dict[temp_key] = [val]
    main_list.append(temp_dict)
print(main_list)
输出:

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

使用简单的列表理解:

# 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"]
]

您需要在for语句下创建最终列表,如下所示:

my_final_array = []
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)

Pythonic的方法似乎是字典理解

a={
“数据”:[
{
“日期”:“2017-07-28_15-54-10”,
“名称”:“名称1”,
“状态”:“正确”
},
{
“日期”:“2017-07-29_15-54-10”,
“名称”:“名称2”,
“状态”:“正确”
}
]
}
output=[{item['name']:{k:v表示item.items()中的(k,v)如果k不是['data']}中的项的'name'}]
输出
>[{'name1':{'date':'2017-07-28_15-54-10','state':'true'},'name2':{'date':'2017-07-29_15-54-10','state':'true'}]

当JSON对象中的字段太少时,这会让人非常恼火。是的,如果它是case@LanteDellarovere我得到了这个错误,对于d[“data”]TypeError中的x:如果您从文件中读取数据,字符串索引必须是integerupdated,并带有json加载。请看一看,这种方法比我以前的方法要好得多,非常感谢:)这不起作用..AttributeError:'str'对象没有属性'items'
r = {
  "data": [
    {
      "date": "2017-07-28_15-54-10",
      "name": "name1",
      "state": "true",
    },
     {
      "date": "2017-07-29_15-54-10",
      "name": "name2",
      "state": "true",
    }
   ]
  }

data = r['data']
result = []
mkdic = lambda x: [{k: v} for k, v in x.items() if k != "name"]
for i in data:
    result.append( {i.get("name"): mkdic(i) })
import pprint
pprint.pprint(result, indent = 2)