2016-08-03 6 views
5

Ermöglichen den Code-Snippet siehe unten:Eingeschränkte Set-Operationen auf Python-Wörterbuch Schlüssel Ansichten

d = {1:1} 
keys = d.keys() 

print(keys & {1,2,3})# {1} 
d[2] = 2 
print(keys & {1,2,3}) # {1,2} # keys() is a view/reference 
print({1,2}.issubset({1,2,3})) # True 
print(keys.issubset({1,2,3})) # 'dict_keys' object has no attribute 'issubset' 

Es in den offiziellen Dokumenten auf dictionary view objects erwähnt wird:

Keys Ansichten sind so eingestellt, wie da ihre Einträge sind einzigartig und waschbar. .. Dann werden diese Set-Operationen zur Verfügung stehen („andere“ bezieht sich entweder auf eine andere Ansicht oder einen Satz): [&, |, ^, ^]

Wenn die Tasten gesetzt artig, warum sind die Setzen Sie die Operation auf sie beschränkt auf diese vier Infix-Operationen. Warum ist beispielsweise ein side-effect-freier Betrieb wie issuperset oder issubset nicht erlaubt?

+1

sie 'Keys views' =' set-like sind 'Nicht ein' Set' selbst. Wenn Sie Mengenoperationen durchführen möchten, wandeln Sie Ihre Schlüsselansicht in eine Menge um. – levi

+0

@levi auf welche Basis sind einige, und nicht andere, der Set-Operationen ausgewählt? – DurgaDatta

+0

'issubsert' ist nicht' issubset'. –

Antwort

6

Warum, zum Beispiel, sind nicht nebenwirkungsfreie Betrieb wie issuperset oder issubset Betrieb nicht erlaubt?

Sie sind; Sie müssen nur die >= und <= Operatoren:

print(keys <= {1, 2, 3}) 

Sie auch isdisjoint in Verfahren Form unterstützen, da es für sie kein Betreiber ist:

print(keys.isdisjoint({1, 2, 3})) 
+1

Gibt es einen Grund, warum Superset-/Subset-Testoperationen nicht in Form einer Methode verfügbar sind? – DurgaDatta

+0

@DurgaDatta: Ich weiß nicht. Die [dict view PEP] (https://www.python.org/dev/peps/pep-3106/) schlug vor, die Methodenformulare zu implementieren, aber irgendwann beschlossen sie, dies nicht zu tun. Es ist wahrscheinlich eine Unterhaltung darüber irgendwo vergraben wie die Python-Dev Mailingliste oder der Issue Tracker. – user2357112

Verwandte Themen