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?

3voto

carl Punkte 48262

Versuchen Sie dies:

dictionary['foo' if otherset == 'bar' else 'bar'].discard(element)

2voto

Vicki Laidler Punkte 3225

Benutzen Sie ein Wörterbuch, um den anderen Satz nachzuschlagen:

>>> other={'foo':'bar','bar':'foo'}
>>> d = { "foo": set(["a", "b"]), "bar": set(["b", "c"]) }
>>> element = "b"
>>> setname = "bar"
>>> d[other[setname]].discard(element)
>>> d
{'foo': set(['a']), 'bar': set(['c', 'b'])}

1voto

Matthew Flaschen Punkte 266507

Wie wäre es damit:

keys = dict.keys()
dict[keys[1 - keys.index(Other_Set)]].discard(Element)

Mit discard erhalten Sie keine KeyError wenn das Element nicht in der Menge enthalten ist. Daher brauchen Sie Ihre Prüfung nicht (eine andere Alternative wäre, die KeyError ). Und 1 - entfällt die Notwendigkeit der abs .

1voto

unutbu Punkte 769083

Diese Methode könnte für Sie geeignet sein, wenn Sie nicht von vornherein die Namen der Schlüssel in dct :

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

element='b'
other_set='bar'

for key,value in dct.iteritems():
    if key != other_set:
        value.discard(element)

print(dct)
# {'foo': set(['a']), 'bar': set(['c', 'd'])}

0voto

Plumenator Punkte 1662
element = "b"
other = "bar"
d = { "foo": set(["a", "b"]), "bar": set(["b", "c"]) }
theSet = d[[s for s in d.iterkeys() if s != other][0]]
theSet.discard(element)

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