Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将JSON值放入Python列表中_Python - Fatal编程技术网

如何将JSON值放入Python列表中

如何将JSON值放入Python列表中,python,Python,我有一个json列表,如下所示: { "callback": [{ "id": "R_puFk4fZ8m1lE4bD", "set": "Default Response Set", "ace": "asdf", "date": "asdfdsa", "1": "asdf", "2": "s", "3": "3",

我有一个json列表,如下所示:

{
    "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'}