如何将JSON值放入Python列表中
我有一个json列表,如下所示:如何将JSON值放入Python列表中,python,Python,我有一个json列表,如下所示: { "callback": [{ "id": "R_puFk4fZ8m1lE4bD", "set": "Default Response Set", "ace": "asdf", "date": "asdfdsa", "1": "asdf", "2": "s", "3": "3",
{
"callback": [{
"id": "R_puFk4fZ8m1lE4bD",
"set": "Default Response Set",
"ace": "asdf",
"date": "asdfdsa",
"1": "asdf",
"2": "s",
"3": "3",
"4": "1",
"zone": "0",
"long": "33.564498901367",
"lat": "-112.00869750977"
}
]
}
我的实际数据在列表中有很多json对象,我想知道如何将“日期”和“区域”之间的数字放在json中的单独列表中。json对象之间的数字各不相同,但它们始终位于“日期”和“区域”值之间
我将如何将其转化为:
{
"callback": [{
"id": "R_puFk4fZ8m1lE4bD",
"set": "Default Response Set",
"ace": "asdf",
"date": "asdfdsa",
"Q": [
"1": "asdf",
"2": "s",
"3": "3",
"4": "1"
],
"zone": "0",
"long": "33.564498901367",
"lat": "-112.00869750977"
}
]
}
使用内置的int()
函数检查整数键:
new_list = []
for old_data in old_list: #old_list is the value of 'callback' key
data = {'Q': {}}
for key in old_data.keys():
try:
num = int(key)
data['Q'][key] = old_data[key]
except ValueError: # stringy keys
data[key] = old_data[key]
new_list.append(data)
现在,使用类似于json.dumps()
的东西打印new\u list
将得到如下结果:
[
{
"Q": {
"1": "asdf",
"2": "s",
"3": "3",
"4": "1"
},
"id": "R_puFk4fZ8m1lE4bD",
"set": "Default Response Set",
"ace": "asdf",
"date": "asdfdsa",
"zone": "0",
"long": "33.564498901367",
"lat": "-112.00869750977"
}
]
您可以通过设置成员身份对其进行分类(如PM 2Ring所述,设置成员身份更快O(1)): 结果(注意:字典未排序):
注意:没有什么是“始终在'date'和'zone'之间”,因为这相当于Python字典,并且不能保证顺序。它们是唯一的数字键吗(以字符串表示)?@roganjosh哦,好的,谢谢。它们是以字符串表示的键,但并非所有回调都是字符串的数字表示,有些只是字符串。好的。。。也许你可以走另一条路。如果不包括您要捕获的密钥,您不想捕获的密钥列表是否总是相同的?是否所有其他字段都是静态字段,而动态字段是您要分组的字段<代码>如果键不在[“id”、“set”、“ace”、“date”、…、“lat”]:好主意@TemporalWolf,尽管使用集合比使用列表更有效。这假设
Q
应该包含键为int
的所有元素。这可能会也可能不会满足OP.@TemporalWolf不,它不会这样做<代码>Q具有字符串键。查看我的输出。感谢您的回复,但正如TemporalWolf所说的,我需要捕获的并非所有键都是整数。@jdoe我很抱歉,但您的意思是,在Q
中有其他键只是“数字”吗?@jdoe哦,我理解您的意思。因此,您最初希望将显示在日期
和区域
键之间的键分开。
def group_questions(source_dct):
meta_tags = {"id", "set", "ace", "date", "zone", "long", "lat"}
result_dct = {"Q": {}}
for key in source_dct:
if key not in meta_tags:
result_dct["Q"][key] = source_dct[key]
else:
result_dct[key] = source_dct[key]
return result_dct
>>> print group_questions(dct)
{'set': 'Default Response Set',
'ace': 'asdf',
'zone': '0',
'long': '33.564498901367',
'Q': {'1': 'asdf',
'3': '3',
'2': 's',
'4': '1'},
'lat': '-112.00869750977',
'date': 'asdfdsa',
'id': 'R_puFk4fZ8m1lE4bD'}