2 Stimmen

In einem Diktat aus zwei Mengen ein bestimmtes Element aus der anderen Menge entfernen

Ich habe ein Diktat, { "foo": set(["a", "b"]), "bar": set(["c", "d"]) } und ich erhalte ein Element aus einer der beiden Mengen und den Namen der andere gesetzt. Ich muss dieses Element entfernen. Wie kann ich das tun? Mein bester Versuch bisher ist dieser:

keys = dict.keys()
if Element in dict[keys[0]].union(dict[keys[1]]):
  dict[keys[abs(keys.index(Other_Set) - 1)]].remove(Element)

Das scheint mir allerdings etwas übertrieben zu sein; gibt es eine Möglichkeit, das zu verbessern?

0voto

Tony Veijalainen Punkte 5249

Meine Variante, die für eine beliebige Anzahl von Sets gilt, nimmt einen bestimmten Gegenstand für alle anderen heraus:

dict_of_sets={'foo':set(['a','b','c']),'bar': set(['d','b','e']),'onemore': set(['a','e','b'])}
givenset,givenitem='bar','b'
otherset= (key for key in dict_of_sets if key != givenset)
for setname in otherset:
  dict_of_sets[setname].discard(givenitem)

print dict_of_sets

"""Output:
{'foo': set(['c', 'a']), 'bar': set(['e', 'b', 'd']), 'onemore': set(['e', 'a'])}
"""

-1voto

the wolf Punkte 31958

Dies ist ein viel "pythonischerer" Weg:

>>> d = { "foo": set(["a", "b"]), "bar": set(["b", "c"]) }

>>> d['foo']-=d['bar']
>>> d
{'foo': set(['a']), 'bar': set(['c', 'b'])}

Natürlich d['foo'] sein könnte d[hashable_key] mit hashable_key mit Benutzereingaben oder ähnlichem.

Es sei daran erinnert, dass die Operatoren - & ^ | auf Mengen werden auf die jeweiligen Mutationsmethoden von überladen:

a_set.difference_update(other_set) # also "-"
a_set.intersection_update(other_set) # also "&"
a_set.symmetric_difference_update(other_set) # also "^"
a_set.update(other_set) # also "-"

Sie können dann eine erweiterte Zuweisung verwenden -= um den eingestellten Wert von 'foo' an Ort und Stelle zu ändern. All diese anderen Lösungen, die hier angeboten werden, erscheinen mir zu wortreich.

bearbeiten Ich habe den OP falsch gelesen und ignoriere dies als Antwort. Ich habe hochgestimmt die beste Lösung .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X