繁体   English   中英

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

[英]Trouble deleting certain nested JSON objects in python

我试图遍历嵌套的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
}
]
}

“状态”列表中的每个项目都是一条推文,每个呼叫返回100条推文。

我要保留的物品清单:

keepers_list = [tweetlist["statuses"][i]["coordinates"],
                tweetlist["statuses"][i]["created_at"],
                tweetlist["statuses"][i]["entities"]["urls"]
                ]

我正在尝试做:

for item in tweetlist:
    if item not in keepers_list:
        del item

我已经试过了这个确切的代码,并且在它/不同的方法上尝试了更多的变体,但我无法回忆起,但无法使其正常工作。 我已经看过许多关于此主题的堆栈交换帖子,但是无法根据我的目的进行调整。

我尝试使用

for key in dict.iterkeys(): ...
for value in dict.itervalues(): ...
for key, value in dict.iteritems():

但是我不能让他们中的任何一个为我想要做的工作。

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

在迭代列表时,切勿删除列表中的项目,您可以

复制列表以进行迭代:

for item in tweetlist[:]:
    ...

将所需的结果保存在另一个列表中:

keep = []
for item in tweetlist:
    if item in keepers_list:
        keep.append(item)

我在Python中的一般经验法则是,如果我发现自己使用循环,则寻求另一种方法。 在这种情况下,要基于原始条目使用字典理解:

keep = {key:tweet_list[key] for key in tweet_list.keys() if key in keepers_list}

除非原始数据集如此之大,以至于必须对其进行适当处理,否则理解通常会很快,并且,如果相对较短,其自我记录也足够容易理解。

如果要过滤出字典,可以执行以下操作:

for k in dict.keys():
    if k not in keepers_list:
        del(dict[k])
print dict

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM