Erzeugung von sets und dictionaries

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
Benutzeravatar
Judge
User
Beiträge: 129
Registriert: Mittwoch 13. Juni 2012, 22:27
Wohnort: Ratingen
Kontaktdaten:

Hallo zusammen,

Ich lerne Python noch und stoße bei dem dazu verwendetem Buch (Heads first) zwischen den Kapiteln 5 und 6 auf eine Frage :

Als erstes wird einen erklärt was ein Set ist, und das man es, neben den anderen Schreibweisen, sich wie folgt direkt erzeugen und befüllen kann :

Mein_Set = {1, 'test' }

I'm nächsten Kapitel wird aber gesagt, dass die geschweiften Klammern ein Dictionary erzeugen würden:

Mein_Dict = {}

Was stimmt den nun / wie ist das zu verstehen?

Vielen Dank für die Hilfe!
BlackJack

@Judge: Es stimmt beides. Mit ``{1, 'test'}`` erzeugt man beispielsweise ein `set` mit zwei Elementen, und mit ``{'answer': 42}`` erzeugt man ein `dict` mit einem Schlüssel/Wert-Paar. Der Sonderfall wenn man nur die Klammern ohne Inhalt verwendet, erzeugt ein leeres `dict` und halt kein leeres `set`. Wenn man ein leeres `set` braucht, muss man das über den benannten Typ erstellen:

Code: Alles auswählen

In [13]: type({1, 'test'})
Out[13]: set

In [14]: type({'answer': 42})
Out[14]: dict

In [15]: type({})
Out[15]: dict

In [16]: type(set())
Out[16]: set
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Intuitiver wäre vielleicht, wenn literale dicts so erstellt würden:

Code: Alles auswählen

some_dict = {:}
Dann könnte man literale sets so erstellen wie derzeit dicts. Dicts gab es in Python halt schon lange vor sets, deswegen hat niemand daran gedacht, dass es mal zu solchen Fragen kommen könnte. Hätte man vielleicht auch mit Python 3 ändern können, da wäre eine weitere Imkompatibilität kaum aufgefallen :twisted:
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Ich empfinde das als sehr angenehm, das nicht jeder Mist seinen eigenen Syntax hat. Syntaktisch kann man auch den Indexzugriff auf Listen nicht von Dictionary Zugriffen oder Zeichenketten unterscheiden.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
Benutzeravatar
Judge
User
Beiträge: 129
Registriert: Mittwoch 13. Juni 2012, 22:27
Wohnort: Ratingen
Kontaktdaten:

Erstmal: Danke an alle beteiligten! :)
Das sind halt solche Dinge, die einen autodidaktischen Beginner erstmal verwirren. Vielen Dank für die Aufklärung!
Antworten