Seite 1 von 1
set im set
Verfasst: Freitag 9. August 2019, 21:32
von jaxon_has_a_py
Hallo, ich bin neu also entschuldige ich mich schon im voraus für die felher die ich machen werde, ich hoffe ir versteht mein Problem trotzdem.
Aber davon abgesehen ich habe den Fall das ein Element eines Sets das mir vorliegt auch ein Set ist, ich brauche die Daten in diesem zweitem Set, wie komme ich an diese ran?
Natürlich habe ich einiges versucht be vor ich hier angelaufen kam:
zuerst kurtz die Situation als Code darstellen:
2 = {a , b , c}
set_1 = {1 , 2}
#ich habs mal so dargestellt damit ir wisst was geeint ist aber mir liegt das schon so vor, hätte ich das #geschrieben hätte ich eine liste oder so verwendet.
ich hab versucht das Element zu printen mit:
for x in set_1:
print(x)
ich dachte das Ergebnis würde so sein:
1
{a , b , c}
aber das Ergebnis welches ich erhielt war:
1
2
ein anderer lösungs Ansatz war:
print( 2 in set_1)
erwartetes Ergebnis war:
{a , b , c}
tatsächliches Ergebnis:
True
ich hab bevor ich wusste das es sich um ein Set handelt noch andre Sachen versucht die jetzt wo ich weis das es ein Set ist dumm wirken wie zu versuchen den Index zu benutzen.
Auf jeden Fall, möchte ich an {a , b , c} ran weis aber nicht wie.
ich bin neu also sind links zu Tutorials sowie jegliche Form von Tipps immer gern gesehen.
Re: set im set
Verfasst: Freitag 9. August 2019, 22:36
von __deets__
Das kann so nicht sein. Man kann in Python keine Zahl als Bezeichner nehmen.
2 = irgendwas
geht also nicht. Entsprechend ist das auch klar, dass { 1, 2 } niemals etwas anderes als eine 2 enthalten kann.
pillepalle = {6,7,8}
foo = { 1, pillepalle}
hingegen tut was du willst.
Re: set im set
Verfasst: Freitag 9. August 2019, 22:48
von Sirius3
@__deets__: sets kann man nicht in sets packen, weil in eine Set nur hashbare Objekte stehen dürfen und veränderliche Sets haben keinen Hash.
Re: set im set
Verfasst: Freitag 9. August 2019, 23:11
von __deets__
Wo du recht hast. Dann eben ein frozen set

Re: set im set
Verfasst: Samstag 10. August 2019, 01:17
von __blackjack__
Was alles nix daran ändert das der OP nicht das hat was er behauptet. Und selbst wenn er es hätte wird ``2 in set_1`` niemals etwas anderes als `True` oder `False` ergeben wenn `set_1` vom Typ `set` ist. Eine komisch Erwartung ist das da ``{1, 2, 3}`` als Ergebnis haben zu wollen.

Re: set im set
Verfasst: Samstag 10. August 2019, 10:09
von jaxon_has_a_py
was ich genau hab ist:
{'killmail_id': 78310117, 'zkb': {'locationID': 40370039, 'hash': '62c58a6ad9a58f676018b202f4458966bcf0dff4', 'fittedValue': 54490556.68, 'totalValue': 143520742.78, 'points': 1, 'npc': False, 'solo': True, 'awox': False}}
ich geh davon aus das 'zkb' eine variable ist die das folgenden set enthält bin mir aber nicht sicher.
tut mir leid das ich im abstrakten Beispiel oben etwas falsch dargestellt hab das sollte nur ein abstraktes Beispiel sein.
also jetzt nochmal neu: ich möchte die Information aus dem set 'zkb' und komme nicht ran.
damit die beispiele vom original post nicht sinlos waren hier die Entsprechungen :
1 entspricht 'kilmail id'
2 entspricht 'zkb'
{a,b,c} entspricht dem set das auf 'zkb' folgt
Re: set im set
Verfasst: Samstag 10. August 2019, 10:16
von pillmuncher
Re: set im set
Verfasst: Samstag 10. August 2019, 10:23
von Sirius3
Du hast Wörterbücher und auf Wörterbücher greift man über den Schlüssel zu:
Code: Alles auswählen
some_data = {'killmail_id': 78310117, 'zkb': {'locationID': 40370039, 'hash': '62c58a6ad9a58f676018b202f4458966bcf0dff4', 'fittedValue': 54490556.68, 'totalValue': 143520742.78, 'points': 1, 'npc': False, 'solo': True, 'awox': False}}
print(some_data['zkb']['totalValue'])
Re: set im set
Verfasst: Samstag 10. August 2019, 10:34
von __blackjack__
@jaxon_has_a_py: Um bei einem Wörterbuch (`dict`) über einen Schlüssel auf den Wert zuzugreifen benutzt man eckige Klammern:
Code: Alles auswählen
#/usr/bin/env python3
def main():
data = {
'killmail_id': 78310117,
'zkb': {
'locationID': 40370039,
'hash': '62c58a6ad9a58f676018b202f4458966bcf0dff4',
'fittedValue': 54490556.68,
'totalValue': 143520742.78,
'points': 1,
'npc': False,
'solo': True,
'awox': False,
},
}
print(data['zkb'])
if __name__ == '__main__':
main()
Der ``in``-Operator prüft ob der erste Operand im zweiten enthalten ist. Bei Wörterbüchern (`dict`) bezieht sich der Test auf die Schlüssel. ``'zkb' in data`` gibt `True` zurück weil dieser Wert als Schlüssel in `data` enthalten ist. ``'Phloeotribus' in data`` würde beispielsweise `False` ergeben.
In Fällen wo Wörterbücher keine ”beliebigen” Daten enthalten, sondern einen festen Satz an Schlüsseln, also eigentlich semantisch eher Objekte mit Attributen sind, verwende ich ganz gerne das externe `addict.Dict` um solche Daten zu ”verpacken” und dann wie bei Objekten zugreifen zu können:
Code: Alles auswählen
#/usr/bin/env python3
from addict import Dict
def main():
data = Dict(
{
'killmail_id': 78310117,
'zkb': {
'locationID': 40370039,
'hash': '62c58a6ad9a58f676018b202f4458966bcf0dff4',
'fittedValue': 54490556.68,
'totalValue': 143520742.78,
'points': 1,
'npc': False,
'solo': True,
'awox': False,
},
}
)
print(data.zkb)
print(data.zkb.hash)
if __name__ == '__main__':
main()
Re: set im set
Verfasst: Samstag 10. August 2019, 13:31
von jaxon_has_a_py
Danke für die Aufklärung das es keine sets sind sonder dicts.
Dann machst auch sinn das nichts funktioniert hat, woran erkenne ich das es ein dict ist und kein Set?
Ich vermute mal das ich es daran erkenn das nach den Inhalten ein Doppelpunkt und noch was anderes kommt oder?
bsp:
{
'a' : 123
}
wäre dann ein dict, und das wär ein set:
{
'a' ,
'b'
}
ur um scer zu gehen das ichs vestanden hab.
Re: set im set
Verfasst: Samstag 10. August 2019, 14:23
von __deets__
Ja. Kannst du ja auch mal genau so im Interpreter eingeben & das Ergebnis bestaunen.
Re: set im set
Verfasst: Samstag 10. August 2019, 16:03
von __blackjack__
Ansonsten kann man im Zweifelsfall auch immer den Typ mit `type()` ermitteln und mit `print()` ausgeben.
Re: set im set
Verfasst: Samstag 10. August 2019, 16:50
von nezzcarth
jaxon_has_a_py hat geschrieben: Samstag 10. August 2019, 13:31
Ich vermute mal das ich es daran erkenn das nach den Inhalten ein Doppelpunkt und noch was anderes kommt oder?
Wobei das eine etwas saloppe Formulierung ist.

Dictionaries sind Paare aus Schlüsseln und Werten. Was du 'Inhalte' nennst, sind die Schlüssel. Sie stimmen mit Sets darin überein, dass sie unveränderlich sein müssen und jeder Schlüssel pro Dictionary nur einmal vorkommen darf. 'Das andere nach dem Doppelpunkt' sind die Werte, die auch veränderlich sein dürfen. Man verwendet die Schlüssel, um auf die Werte zuzugreifen.