如果JSON对象包含指定短语(从python中的列表中),请删除整个JSON对象

如果JSON对象包含指定短语(从python中的列表中),请删除整个JSON对象,python,json,list,object,Python,Json,List,Object,具有类似于以下内容的JSON文件输出: { "object1": { "json_data": "{json data information}", "tables_data": "TABLES_DATA" }, "object2": { "json_data": {json data information}", "tables_data": "" } } 本质上,如果tables\u data有一个空字符串,如obje

具有类似于以下内容的JSON文件输出:

{
   "object1": {
      "json_data": "{json data information}",
      "tables_data": "TABLES_DATA"
   },
   "object2": {
      "json_data": {json data information}",
      "tables_data": ""
   }
}
本质上,如果
tables\u data
有一个空字符串,如
object2
所示(例如
tables\u data:“
”),我希望删除整个对象,以便输出如下所示:

{
   "object1": {
      "json_data": "{json data information}",
      "tables_data": "TABLES_DATA"
   }
}

做这件事最好的方法是什么?这些对象中的每一个都对应于一个列表中的一个单独索引,我在列表中添加了一个名为
summary[]

要实现这一点,您可以迭代JSON字典并测试
tables\u data
值,如果它们的
tables\u data
值通过测试,则将
objectX
元素添加到一个新字典中:

new_dict={k:v代表k,json_dict.items()中的v)
如果v.get(“tables_data”,“”)!=“”}
如果您的JSON
objectX
如您所说存储在一个列表中,则可以使用列表理解按如下方式处理:

filtered\u summary=[object\u dict for object\u dict in summary
if object_dict.get(“tables_data”,“”)!=“”]

除非你有令人信服的理由不这样做,否则过滤列表或目录(或任何iterable)的python方法不是就地更改它,而是创建一个新的过滤列表或目录。对于你的情况,这看起来像

raw_data = YOUR_DICT_HERE_WHEREVER_IT_COMES_FROM
# NB : empty string have a false value in a boolean test
cleaned_data = {k:v for k, v in raw_data.items() if not v["table_data"]}

应该在什么上下文中删除对象?从json文件本身,或者从json文件读取后从内存中的python字典?从json文件本身,这会在python 3中引发运行时错误(字典在迭代过程中更改了大小)是的,您是对的。我已经更新了我的答案,只使用过滤的元素创建了一个新字典。我的json信息都存储在一个列表中,因此我没有“
项”
”attribute@weovibewvoibweoivwoiv如果问题中的数据结构不是JSON或字典,请给出一个例子一个名为
summary[]
的列表,用于保存我的JSON信息。本质上,每个对象对应于
摘要
列表中的不同项