簡體   English   中英

檢查 python 的字典中的鍵值是否相同

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM