簡體   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