[英]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.