如果缺少鍵或值,我希望從某些 JSON 資料中洗掉所有物件。
這是 JSON 資料的片段:
[
{
"cacheId": "eO8MDieauGIJ",
"pagemap": {}
},
{
"cacheId": "AWYYu9XQnuwJ",
"pagemap": {
"cse_image": [
{
"src": "https://someimage.png"
}
]
}
},
{
"cacheId": "AWYYu9XQnuwJ",
"pagemap": {
"cse_image": [
{
}
]
}
}
]
我正在尋找洗掉資料中的第一個和第三個物件,因為第一個物件有一個空的 ['pagemap'] 而第三個物件有一個空的 ['pagemap']['cse_image']
這是我到目前為止沒有任何運氣的嘗試:
for result in data[:]:
if result['pagemap']['cse_image'] == []:
data.remove(result)
for result in data[:]:
if result['pagemap'] == None:
data.remove(result)
for result in data[:]:
if len(result['pagemap']) == 0:
data.remove(result)
謝謝您的幫助!
uj5u.com熱心網友回復:
兩件事情:
- 您不想在迭代串列時從串列中洗掉元素——您要洗掉的記憶體在您訪問它時會發生變化。
- 第三個物件有一個非空
['pagemap']['cse_image']。它的值是一個包含空字典的單元素串列。您需要對串列進行索引以檢查內部字典是否為空。
考慮到這兩點,下面是一種filter()利用空資料結構具有虛假值這一事實的方法:
result = list(filter(lambda x: x['pagemap'] and x['pagemap']['cse_image'] and x['pagemap']['cse_image'][0], data))
print(result)
uj5u.com熱心網友回復:
如果該資料結構保持一致,則可以使用串列推導來實作。
[e for e in d if e["pagemap"] and e["pagemap"]["cse_image"] and any(e["pagemap"]["cse_image"])]
產生:
[{'cacheId': 'AWYYu9XQnuwJ', 'pagemap': {'cse_image': [{'src': 'https://someimage.png'}]}}]
d您給定的資料結構在哪里。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/429799.html
