Seite 1 von 1

Dict Values verändern

Verfasst: Dienstag 15. Mai 2012, 15:18
von anymagical
Servus,

ich habe folgendes Dict:

Code: Alles auswählen

'A': '1', 'C': '3', 'B': '231'}
Da A=1 und C=3 ist würde für B nur noch der Wert 2 bleiben.
Ist es möglich die Werte von A und C und aus B zu löschen damit B erkannt wird?

Ich habe in etwa an dict.values() gedacht jede Zahl von B in eine Liste zu schreiben und die Zahlen welchen in dem dict gefunden werden daraus löschen und dann wieder neu in B zu schreiben. Scheint mir aber etwas umständlich zu sein. Gibt es vielleicht bessere Methoden das umzusetzen?

Gruß
Anymagical

Re: Dict Values verändern

Verfasst: Dienstag 15. Mai 2012, 17:00
von deets
Das sind die falschen Datenstrukturen wuerde ich mal behaupten. Statt strings waeren sets fuer die values besser. Aber ich frage mich eh, was du da machen willst - warum zB sind A und C priorisiert vor B? Wenn man B zuerst betrachet, fliegen dann nicht A & B komplett raus?

Versuch uns lieber mal zu erklaeren, was du da machen willst.

Re: Dict Values verändern

Verfasst: Dienstag 15. Mai 2012, 17:21
von anymagical
Sudoku

von A1 - I9 hat jedes Feld einen bestimmten Wert. Manche Felder haben Anfangs ja noch mehrere Möglichkeiten. Nehmen wir an A1 wäre 3 dann könnte kein weiteres Feld in der Reihe A und Spalte 1 sowie das obere linke Rechteck mehr den Wert 3 enthalten. Diesen Wert wollte ich aus den restlichen values löschen.

Das ganze sollte natürlich geprüft werden und nur falls len(dict.values()) == 1 stattfinden.

Gruß
Anymagical

Code: Alles auswählen

{'I6': '123456789', 'H9': '123456789', 'I2': '123456789', 'E8': '123456789', 'H3': '123456789', 'H7': '123456789', 'I7': '123456789', 'I4': '123456789', 'H5': '1', 'F9': '123456789', 'G7': '123456789', 'G6': '123456789', 'G5': '123456789', 'E1': '123456789', 'G3': '123456789', 'G2': '123456789', 'G1': '6', 'I1': '7', 'C8': '123456789', 'I3': '123456789', 'E5': '123456789', 'I5': '3', 'C9': '123456789', 'G9': '123456789', 'G8': '2', 'A1': '123456789', 'A3': '123456789', 'A2': '123456789', 'A5': '123456789', 'A4': '123456789', 'A7': '4', 'A6': '123456789', 'C3': '123456789', 'C2': '123456789', 'C1': '123456789', 'E6': '123456789', 'C7': '123456789', 'C6': '7', 'C5': '123456789', 'C4': '6', 'I9': '123456789', 'D8': '6', 'I8': '123456789', 'E4': '123456789', 'D9': '123456789', 'H8': '123456789', 'F6': '123456789', 'A9': '1', 'G4': '123456789', 'A8': '123456789', 'E7': '3', 'E3': '123456789', 'F1': '123456789', 'F2': '1', 'F3': '123456789', 'F4': '123456789', 'F5': '123456789', 'E2': '4', 'F7': '123456789', 'F8': '123456789', 'D2': '123456789', 'H1': '123456789', 'H6': '123456789', 'H2': '5', 'H4': '123456789', 'D3': '123456789', 'B4': '2', 'B5': '123456789', 'B6': '123456789', 'B7': '123456789', 'E9': '123456789', 'B1': '8', 'B2': '123456789', 'B3': '123456789', 'D6': '123456789', 'D7': '123456789', 'D4': '8', 'D5': '123456789', 'B8': '123456789', 'B9': '123456789', 'D1': '123456789'}

Re: Dict Values verändern

Verfasst: Dienstag 15. Mai 2012, 17:55
von deets
Ah, ok. Wie gesagt, deine Datenstruktur ist ungeeignet. Jedes Feld hat ein Set mit den Zahlen 1 - 9 drin, und alle 81 Felder sind in einer langen Liste. Und dann hast du 27 Listen mit Feldindizes fuer die 27 9er-Gruppen. Die baust du programmatisch auf. Fuer die horizontalen und vertikalen Zeilen/Spalten ist das besonders einfach, die 9 3x3 Felder sollten aber auch klappen. Zur Not schreibst du das per Hand hin.

Und dann kannst du zB auf jeder Flaeche eine Menge bilden aus all den 1-stelligen Feldern, und ziehst die von der Mengen der mehrstelligen Felder ab.

Code: Alles auswählen

a = set([1])
b = set([2])
c = set(xrange(1, 10))

c -= a | b
print c

Re: Dict Values verändern

Verfasst: Dienstag 15. Mai 2012, 18:21
von anymagical
Ich habe 2 Listen 1 in welche A1-i9 gespeichert ist und 1 in welcher das Sudoku gespeichert ist. Dies bin ich folgender maßen angegangen:

Code: Alles auswählen

table=dict(zip(list_1,list_2))
Danach:

Code: Alles auswählen

digits="123456789"
for char in list_1:
    if table[char]==".":
        table[char]=digits
    else:
        continue
Also einfach statt des dict() ein set() benutzen.

Ich habe daran gedacht das jetzt nach und nach durch entfernen der Möglichen das Sudoku gelöst wird.

Grüße
Anymagical

Re: Dict Values verändern

Verfasst: Dienstag 15. Mai 2012, 18:55
von BlackJack
Mal so als Hinweis: Sudokus waren hier schon öfter Thema. Das erste mal das ich mich dran erinnern kann hier: http://www.python-forum.de/viewtopic.php?f=9&t=3378