2017-09-08 1 views
2

Ich habe ein Wörterbuch mit Strings als Schlüssel und eine Liste mit Koordinaten der Punkte als Werte.Iterieren durch Wörterbuch mit verschachtelten Listen und Drucken an Board-Position

d.h.

dict = {'.' : [[0,0],[0,1]...], 'X': [[0,2], [8,1]...] } 

wo das 'X' und '' Schlüssel enthalten nicht die gleichen Koordinaten.

Mein Problem besteht darin, sie zu durchlaufen und den Schlüssel an der Stelle der Werte zu drucken. Ich habe eine verschachtelte for-Schleife versucht, aber ich weiß nicht, wie man auf Koordinaten an einem Ausgangs-Terminal zugreifen kann.

Ich möchte meine Ausgabe auf die Konsole drucken nicht plotten.

Ich möchte meine Ausgabe ähnlich aussehen:

..................X.... 
XX...........X......... 
XXX.................... 
XXX....X...X...X..X.... 
....................... 
....................... 
....................... 

ich Python bin mit 3

+0

Sie wollen plotten oder drucken nur den Schlüssel/Werte Paar? –

+1

Sie haben eine Beispieleingabe (oder zumindest teilweise) eingegeben, geben nun eine Beispielausgabe und fügen Ihre bisherigen Versuche hinzu. –

+0

Die Art, wie ich das lese, ist, dass Sie alle Koordinaten (zwei ganze Zahlenbereiche - zum Beispiel 0-8) durchlaufen und für jedes Koordinatenpaar eine "umgekehrte Suche" durchführen wollen, um den Schlüssel zu finden, der diese Koordinate enthält Paar, und drucken Sie es? – jedwards

Antwort

1

Wenn Sie also eine 2D-Liste haben, die dem Board

board = [[' ' for _ in range(9)] for _ in range(9)] 

steht, können Sie zeigen es mit pprint zum Beispiel

import pprint 
pprint.pprint(board) 

[[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], 
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], 
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], 
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], 
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], 
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], 
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], 
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], 
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']] 
So 0

auf Ihre Ersetzungen durchführen, können Sie eine Schleife durch das Wörterbuch und ersetzen diese Elemente nach Bedarf

d = {'.' : [[0,0],[0,1]], 'X': [[0,2], [8,1]] } 
for k, v in d.items(): 
    for i, j in v: 
     board[i][j] = k 

die in

Ergebnisse
>>> pprint.pprint(board) 
[['.', '.', 'X', ' ', ' ', ' ', ' ', ' ', ' '], 
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], 
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], 
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], 
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], 
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], 
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], 
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '], 
[' ', 'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ']] 
0

Ein anderer Weg wäre, zuerst „Invert“ das Wörterbuch, Schleife dann über deine Koordinaten und schaue sie im umgekehrten Wörterbuch nach.

Etwas wie:

#d1 = {'.' : [[0,0],[0,1]...], 'X': [[0,2], [8,1]...] } 
d1 = {'.' : [[0,0],[0,1]], 'X': [[0,2], [8,1]] } 


# "Invert" the dictionary 
d2 = {} 
for (symbol, coords) in d1.items(): 
    for coord in coords: 
     d2[tuple(coord)] = symbol   # Note 1 

# Display it (assuming your coordinates go from 0-9 inclusive 
for y in range(10): 
    for x in range(10): 
     sym = d2.get((x,y), ' ')   # Note 2 
     print(sym, end='')     # Note 2 
    # Print a newline at the end of each row 
    print() 

Anmerkung 1: Hier coord ist eine 2-Element-Liste, sondern als Listen nicht als Dictionary-Schlüssel verwendet werden können, ich wandle sie in Tupel.

Hinweis 2: Dies ist nur notwendig, weil der Beispielcode ein unvollständiges d1 Wörterbuch enthält. Wenn Ihr d1 Wörterbuch alle hat entfielen auf die Paare, benutzen Sie diese beiden Zeilen in einfach

print(d2[(x,y)], end='') 

Anmerkung 3 kombinieren könnte: Hier sind wir ein optionales Argument für die print Funktion spezifiziert, es zu sagen kein hinzufügen Zeilenumbruch nach dem Drucken.

Die Ausgabe sieht ein wenig seltsam:

.   
.  X 
X   

(mit zusätzlicher Raum nur Linien), aber nur, weil mein d1 Wörterbuch ist unvollständig.

Schließlich können Sie all dies durchgehen und feststellen, dass Ihr Board aus scheint, wie das Muster nach oben geht, wenn es nach rechts zeigen sollte. Wenn das der Fall ist, sind Ihre Koordinaten in (y, x) Reihenfolge und ich nahm an, dass sie in (x, y) Reihenfolge waren.Ändern Sie einfach die Linie

d2.get((x,y), ' ') 

zu

d2.get((y,x), ' ') 

oder, wenn Sie die Vereinfachung in der Anmerkung 2, ändern

print(d2[(x,y)], end='') 

zu

print(d2[(y,x)], end='') 
0

zunächst eine leere initialisieren gemacht Board kann mit Punkten bestückt sein, das kann sein getan mit:

board = [['.' for _ in range(8)] for _ in range(8)] 

, die eine Ausgabe von ergibt:

[['.', '.', '.', '.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.', '.', '.', '.']] 

Dies ist jedoch nicht weiter eine nette Art und Weise des Vorstandes des Drucks so vor gehen, können wir eine Art und Weise des Druckens es schaffen.

Dies kann durch Durchschleifen des rows und für jede row Beitritt dieser Liste getan werden, um eine Zeichenfolge zu erstellen und wie so Druck:

for r in board: 
    print(''.join(r)) 

diese kleine für Schleifen druckt fein säuberlich die aktuellen Board als:

........ 
........ 
........ 
........ 
........ 
........ 
........ 
........ 

die Punkte mit Kreuzen zu ersetzen, wo in der dict angegeben, können wir wirklich einfach tun (dies setzt voraus, die Koordinaten der Form sind [x, y]):

d = {'.' : [[0,0],[0,1]], 'X': [[0,2], [4,1], [2,5]] } 
for c in d['X']: 
    board[c[1]][c[0]] = 'X' 

dann können wir nach wie vor das Brett angezeigt werden und wir erhalten:

........ 
....X... 
X....... 
........ 
........ 
..X..... 
........ 
........ 

Hope this :)

0

hilft würde ich die coords als Schlüssel speichern nur die Werte nicht, es sei denn, Sie Einen besonderen Grund dafür zu haben. Natürlich können Sie Listen nicht als Schlüssel verwenden, Sie müssen stattdessen Tupel verwenden.

board = {(x, y): '.' for x in range(10) for y in range(10)} 

board[(2, 3)] = 'X' 

for y in range(10): 
    for x in range(10): 
     print(board[(x, y)], end=' ') 
    print() 

Ausgang:

. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . X . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
Verwandte Themen