Ich habe eine Reihe von Objekten, und ich möchte Werte der Menge mit einem Lambda-Ausdruck oder eine Art von Bedingung zu entfernen.Pop einen Wert aus einer Menge mit einer Bedingung
ich dies so tun würde:
def pop(container, cond):
value = None
removed = False
for x in container:
if cond(x):
value = x
removed = True
container.remove(x)
break
if not removed:
raise Exception('No value to pop')
return value
Ein Beispiel usecase ist:
compare_object = {"price": 100, "quantity": 1, "product_id": 2}
objs = set([....])
def comparison(obj):
def wrap(obj2):
return (
obj2['price'] == obj['price'] and
obj2['quantity'] == obj['quantity'] and
obj2['product_id'] == obj['product_id']
)
similar_obj = pop(objs, comparison(compare_object))
Auf diese Weise haben wir ein ähnliches Objekt aus einer Menge erhalten und folglich wird die Menge reduziert werden nach einem Aufruf der Methode.
Ich würde gerne wissen, ob es eine einfachere Möglichkeit gibt, dies mit einer tatsächlichen Datenstruktur zu tun, die bereits in Python verfügbar ist, anstatt das Set zu durchlaufen, was bei großen Sets teuer sein könnte.
Ok ... Also, was ist das Problem? Gibt es einen Fehler? – mgilson
Nein, ich würde gerne wissen, ob ich das Rad neu erfinde oder ob es eine Datenstruktur gibt, die das schon tut. –
Ich glaube nicht, dass es ein eingebautes Set-ähnliches Objekt gibt, das dies tut. 'set' _does_ haben eine' .pop'-Methode, aber es gibt Ihnen keine Kontrolle darüber, welches Element entfernt wird ... – mgilson