set im set

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
jaxon_has_a_py
User
Beiträge: 3
Registriert: Donnerstag 8. August 2019, 21:17

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.
bin neu pls no hate
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

@__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.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wo du recht hast. Dann eben ein frozen set ;)
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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. 🤔
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
jaxon_has_a_py
User
Beiträge: 3
Registriert: Donnerstag 8. August 2019, 21:17

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
bin neu pls no hate
Benutzeravatar
pillmuncher
User
Beiträge: 1530
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

In specifications, Murphy's Law supersedes Ohm's.
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

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'])
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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()
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
jaxon_has_a_py
User
Beiträge: 3
Registriert: Donnerstag 8. August 2019, 21:17

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.
bin neu pls no hate
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ja. Kannst du ja auch mal genau so im Interpreter eingeben & das Ergebnis bestaunen.
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ansonsten kann man im Zweifelsfall auch immer den Typ mit `type()` ermitteln und mit `print()` ausgeben.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
nezzcarth
User
Beiträge: 1762
Registriert: Samstag 16. April 2011, 12:47

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.
Antworten