Ein paar Fragen zu Dictionarys

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
heiliga horsd

Hallo, ich habe ein paar Fragen zu Dictionarys, und zwar:

a) Wie kann ich überprüfen, ob bestimmte Werte genau ein mal in einem Dictionary vorkommen?

b) Wie kann ich die Werte innerhalb des dicts vertauschen?

Die Anzahl der einträge ist immer bekannt und konstant (9)


Danke für Antworten,
Lg HH
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

1. Es gibt immer nur einen Key!
2. Ein normales dict kann man nicht ordnen

naja fast

Code: Alles auswählen

sorted(my_dict.keys())
the more they change the more they stay the same
heiliga horsd

Naja, es sieht so aus: Ich habe mir überlegt, man könnte ja mit Python ein Sudoku sicherlich recht schnell per Brute Force lösen. Damit ich jedes Feld einzeln ansprechen kann, würde ich ein Dicitionary hernehmen, aber es stehen ja bei einem Sudoku die Werte bekanntermaßen nicht geordnet da, daher die Frage des vertauschens. Und in einer Reihe darf ja 1-9 auch nur einmal vorkommen...
Panke
User
Beiträge: 185
Registriert: Sonntag 18. März 2007, 19:26

Für ein Sudoku nimm einfach zweidimensionale Listen. Da ist der Zugriff per Index O(1) oder einfach nur eine Liste und rechne die Indizes um.
heiliga horsd

Das wäre auch eine Möglichkeit, daran hab ich gar nicht gedacht, danke.
Aber wie stelle ich sicher, dass jeder Wert bloß einmal da ist?

Per

Code: Alles auswählen

if blabla in a:
    print(blabla)
Kann ich ja schauen, ob ein Wert vorhanden ist, aber wie oft sagt mir das nicht...
Zuletzt geändert von heiliga horsd am Freitag 19. Februar 2010, 19:27, insgesamt 2-mal geändert.
Panke
User
Beiträge: 185
Registriert: Sonntag 18. März 2007, 19:26

Indem Du per Hand guckst, ob etwas doppelt vorkommt.
heiliga horsd

Gibts da denn keine "automatische" Möglichkeit?
Panke
User
Beiträge: 185
Registriert: Sonntag 18. März 2007, 19:26

Nein. Aber das erste Feld links oben bekommst du beispielsweise so als Liste. Schauen wieviele doppelt sind, sollte dann aber echt nicht mehr schwierig sein.

Code: Alles auswählen

liste = [zwei_d_feld[x][y] for x in range(3) for y in range(3)]
BlackJack

Man könnte zusätzlich pro Reihe, Spalte, und 3x3-Kästchen je ein `set()` verwalten, wo man die Zahlen "abstreicht", die schon verwendet wurden. Die Schnittmenge für ein 1x1-Kästchen ergibt dann die Zahlen, die man da noch reinschreiben darf. Einfach mal im Forum suchen, so eine Lösung habe ich hier irgendwo mal gepostet.
heiliga horsd

@Panke: Tut mir Leid, aber den Code bzw. was du meinst versteh ich grad überhaupt nicht... könntest du das etwas ausführen?
Außerdem funktioniert der Code bei mir nicht :/

Trotzdem Danke für deine Bemühungen!
@Blackjack: OK, ich werd mal die Forensuche befragen! Auch dir herzlichen Dank!

Lg HH
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

heiliga horsd hat geschrieben:Per

Code: Alles auswählen

if blabla in a:
    print(blabla)
Kann ich ja schauen, ob ein Wert vorhanden ist, aber wie oft sagt mir das nicht...

Code: Alles auswählen

>>> mylist = [1,2,3,4,5,1,1,1,2,3]
>>> mylist.count(1)
4
Panke
User
Beiträge: 185
Registriert: Sonntag 18. März 2007, 19:26

Mein Code verwendet eine List Comprehension. Wenn er bei Dir nicht funktioniert, solltest Du mindestens die Fehlermeldung mit angeben, um nachzuvollziehen, warum das so ist. Ich vermute mal, du hast einfach keine entsprechende Liste an den Namen zwei_d_feld gebunden.

Code: Alles auswählen

spielfeld = [[None]*9 for x in range(9)]
Wieder eine List Comprehension. Lies Dir den Teil der Anleitung durch, auf den ich oben verwiesen habe. Falls Du dazu Fragen hast, stelle sie einem gesonderten Thema.
heiliga horsd

@Panke: Danke für den Link, ja in der tTat hat bloß die 2d-Liste gefehlt. Danke dir!

@snafu: Danke für den Hinweis!! Jedoch ist mir aufgefallen, dass das nur etwas bei einer eindimensionalen Liste bringt - gibts da auch was für mehrdimensionale?
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Code: Alles auswählen

>>> mylist = [[1,2,3,4,5,1,1,1,2,3],[2,3,4,5,1,7,8,1,2,1]]
>>> sum(x.count(1) for x in mylist)
7
MfG
HWK[/code]
heiliga horsd

Funktioniert einwandfrei, Vielen Vielen Dank!
Antworten