无法在python中删除某些嵌套的JSON对象

Bil*_*ill 5 python twitter json dictionary nested

我试图遍历嵌套的JSON对象列表(通过tweepy.api.search从twitter rest API返回)并删除某些对象.我有一个要保留的对象列表.我希望指定要保留哪些字典对象而不是删除哪些字典对象,因为不同的推文具有不同的键.它们都有一些键,如"text","created_at"等......但是还有其他键只有某些推文才有.

我遇到了两个问题.

1)迭代字典时我无法删除字典项

2)许多字典对象包含我无法访问的嵌套列表和字典

我正在迭代的JSON文件的一小部分:

{
"statuses": [
    {
        "contributors": null,
        "coordinates": null,
        "created_at": "Thu Nov 12 01:28:07 +0000 2015",
        "entities": {
            "hashtags": [],
            "symbols": [],
            "urls": [
                {
                    "display_url": "twitter.com/thehill/status\u2026",
                    "expanded_url": "https://twitter.com/thehill/status/664581138975989761",
                    "indices": [
                        139,
                        140
                    ],
                    "url": "https://t.co/9zfkg2FixZ"
                }
            ],
            "user_mentions": [
                {
                    "id": 2517854953,
                    "id_str": "2517854953",
                    "indices": [
                        3,
                        19
                    ],
                    "name": "It'sAlwaysPolitical",
                    "screen_name": "politicspodcast"
                }
            ]
        },
        "favorite_count": 0,
        "favorited": false,
        "geo": null
}
]
}
Run Code Online (Sandbox Code Playgroud)

列表"状态"中的每个项目都是一条推文,每次调用返回100条推文.

我要保留的项目清单:

keepers_list = [tweetlist["statuses"][i]["coordinates"],
                tweetlist["statuses"][i]["created_at"],
                tweetlist["statuses"][i]["entities"]["urls"]
                ]
Run Code Online (Sandbox Code Playgroud)

我想做:

for item in tweetlist:
    if item not in keepers_list:
        del item
Run Code Online (Sandbox Code Playgroud)

我已经尝试了这个确切的代码和更多的变体/不同的方法比我记忆,但不能使它工作.我已经看过很多关于这个主题的堆栈交换帖子,但是还没有能够使它们适应我的目的.

我试过用

for key in dict.iterkeys(): ...
for value in dict.itervalues(): ...
for key, value in dict.iteritems():
Run Code Online (Sandbox Code Playgroud)

但我不能让他们中的任何一个为我想做的事情而工作.

任何帮助,或只是推动正确的方向将不胜感激.

Ber*_*rer 5

永远不要在迭代列表时删除列表中的项目,您可以

复制列表以进行迭代:

for item in tweetlist[:]:
    ...
Run Code Online (Sandbox Code Playgroud)

将您想要的结果保存在另一个列表中:

keep = []
for item in tweetlist:
    if item in keepers_list:
        keep.append(item)
Run Code Online (Sandbox Code Playgroud)