[英]Check if key value is the same in a dict in python
我在這個問題中詢問了當 object 內部的列表為空時如何刪除它( 如果 Python 中的列表為空,則刪除 object )。 問題是我只想在objectId
值相同時這樣做。 我有其他具有不同 ID 的對象,我不想碰它。
輸入:
data = [{
"objectID": 10745,
"results": [
{
"model": "AUDI - TT QUATTRO",
"price_str": "4 800 EUR"
}]
},
{
"objectID": 10745,
"results": []
},
"objectID": 10746,
"results": [
{
"model": "Porsche 911",
"price_str": "48 000 EUR"
}]
},
]
我的代碼:
for item in data:
objectId = item["objectID"]
results = item["results"]
def removeDuplicate():
#if objectid are the same
new_data = [item for item in data if item['results']]
data[:] = new_data
removeDuplicate()
預期 output:
[{'objectID': 10745,
'results': [{'model': 'AUDI - TT QUATTRO', 'price_str': '4 800 EUR'}]}, {'objectID': 10746,
'results': [{'model': 'Porsche 911', 'price_str': '48 000 EUR'}]}]
雖然可能不快,但很短。
data = [{
"objectID": 10745,
"results": [{
"model": "AUDI - TT QUATTRO",
"price_str": "4 800 EUR"
}]
},
{
"objectID": 10745,
"results": []
},
{
"objectID": 10746,
"results": [{
"model": "Porsche 911",
"price_str": "48 000 EUR"
}]
},
{ # add a test example
"objectID": 10747,
"results": []
}
]
r = [d for i,d in enumerate(data) if d['objectID'] not in set(map(lambda x:x['objectID'],data[:i])) or d['results']]
print(r)
結果:
[{
'objectID': 10745,
'results': [{
'model': 'AUDI - TT QUATTRO',
'price_str': '4 800 EUR'
}]
}, {
'objectID': 10746,
'results': [{
'model': 'Porsche 911',
'price_str': '48 000 EUR'
}]
}, {
'objectID': 10747,
'results': []
}]
您需要將您的條件調整為:
new_data = [item for item in data if item['results'] and objectId != item["objectID"]]
您可以使用itertools.groupby
但您需要對數據進行排序。 我會使用operator.itemgetter
作為密鑰。
from itertools import groupby
from operator import itemgetter
data = [...]
osort = itemgetter('objectID')
sorted_data = sorted(data, key=osort)
output = [next(o for o in g if o['results']) for _, g in groupby(sorted_data, osort)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.