2017-02-22 3 views
1

Ich will eine „Reise“ Zusammenfassung machen, die wie folgt aussieht:Shop Verschiedene Arten von Werten in einer Key - Wörterbuch

Es gibt Ausgangspunkte Chicago zu erreichen. Für den Zugriff auf diese Stadt, können Sie verwenden: Autobahn X,Autobahn Z, Autobahn ZZ.

Die Daten, die ich momentan sieht ungefähr so ​​aus:

Autobahn X, NY, Chicago

Autobahn Z, LA, Chicago

Autobahn X, Austin, Chicago

Autobahn ZZ, Miami, Chicago

Meine Frage: Was sollte ich verwenden, um diese Daten richtig zu speichern?

Ich habe versucht, ein Wörterbuch mit einer Liste darin zu verwenden. Es hat jedoch nicht funktioniert, weil ich die Liste der Autobahn nicht speichern konnte. Ich schaffte es nur so etwas wie

{Chicago: [NY, LA, Austin]} zu bekommen

UPDATE !!

Ich habe gerade herausgefunden, dass es doppelte Daten in meinen Daten gibt, und das ist keine gute Nachricht, weil ich möchte, dass die Ausgangspunkte eindeutig sind. Im Moment sieht es wie folgt aus:

Autobahn X, NY, Chicago

Autobahn X, NY, Chicago

Autobahn Z, LA, Chicago

Autobahn X, Austin, Chicago

Autobahn ZZ, Miami, Chicago

Autobahn X, NY, Chicago

+0

So die Daten speichern Sie versuchen, den besten Weg, um herauszufinden, so dass für jede Stadt, können Sie andere Städte sehen, die Sie gehen können? – jlarks32

+0

@ jlarks32 Ich versuche einen Weg zu finden, wie all diese Daten gespeichert und genau wie die Zusammenfassung gedruckt werden. – ThomasWest

Antwort

1

Verwenden Sie eine Liste von Tupeln in Ihrem Wörterbuch. Der erste Punkt in jedem Tupel wäre der Highway, der zweite der Startpunkt.

routes = {'Chicago': [('Highway X', 'NY'), ('Highway Z', 'LA'), ('Highway AX', 'Austin'), ('Highway ZZ', 'Miami')]} 

Dann ist es trivial, die Zusammenfassung zu erzeugen:

for city in routes: 
    paths = ', '.join(sorted({route[0] for route in routes[city]})) 
    print("There are {} starting points to reach {}. To access this city, you can use: {}".format(len(routes[city]), city, paths)) 

Die erste Zeile verwendet einen Satz Verständnis doppelte Autobahnen zu entfernen und dann sortiert und schließt sich ihnen an einen String zu machen. Diese Zeichenfolge sowie die Zielstadt und die Anzahl der Routen werden dann verwendet, um die endgültige Zusammenfassungszeichenfolge zu erstellen. Die Ausgabe des obigen Code wäre:

 
There are 4 starting points to reach Chicago. To access this city, you can use: Highway X, Highway Z, Highway ZZ 

Eine einfache Möglichkeit, die routes dict zu konstruieren ist, eine collections.defaultdict von Listen zu verwenden. Unter der Annahme, dass Ihre Daten aus einer CSV-Datei kommen:

import csv 
from collections import defaultdict 

routes = defaultdict(list) 

with open('data.csv') as f: 
    reader = csv.reader(f) 
    for highway, start, dest in reader: 
     routes[dest].append((highway, start)) 
+0

Danke, ich habe es versucht, und es hat funktioniert! Ich möchte eine Folgefrage stellen. Ist es möglich, die Zielstädte anhand der meisten Ausgangspunkte zu sortieren? Angenommen, meine Daten sind Chicago = 4 Startpunkte, Seattle = 12 Startpunkte und SF = 2 Startpunkte. Dann wird mein Code zunächst Seattle, dann Chicago und SF drucken. – ThomasWest

+0

Hallo, ich habe gerade entdeckt, dass es doppelte Daten gibt. Gibt es eine Möglichkeit, diese Duplizierung zu beseitigen, wenn ich anhänge? – ThomasWest

+0

Re duplicates :: yes, benutze eine Reihe von Tupeln (anstelle einer Liste) und ändere 'routes [dest] .append()' in 'routes [dest] .add()'. – mhawke

0

Verschachteln Sie einige Wörterbücher. So können Sie einer "Route" folgen.

{'Highway X': {'Austin': 'Chicago', 'NY': 'Chicago'}, 
'Highway Z': {'LA': 'Chicago'}, 
'Highway ZZ': {'Miami': 'Chicago'}} 

Alternativ:

{'Austin': {'Highway X': 'Chicago'}, 
'LA': {'Highway Z': 'Chicago'}, 
'Miami': {'Highway ZZ': 'Chicago'}, 
'NY': {'Highway X': 'Chicago'}} 
+0

Ich werde das zuerst ausprobieren. Vielen Dank! – ThomasWest

1

Der beste Weg, um Ihre Daten zu organisieren, hängt davon ab, was man mit ihnen machen will.

Möchten Sie Fragen wie "Ich bin in Austin, welchen Highway muss ich nehmen, um nach Chicago zu kommen?" Beantworten?"

Dann Ihre Schlüssel sollten die Abfahrt Städte sein:

lookup = {'Austin': 'Highway X', 
      'NY': 'Highway X', 
      'LA': 'Highway Z', 
      'Miami': 'Highway ZZ'} 

Denn dann Sie die Frage einfach durch Nachschlagen beantworten kann den Ausgangspunkt der Fragesteller:

lookup['Austin'] 
# prints 
# Highway X 

Aber wenn Sie möchten, antworten verschiedene Fragen wie "Jemand, der auf dem Highway X reist, aus welcher Stadt kommen sie eher?", dann würden Sie Ihre Daten anders organisieren.

Wenn Sie jus t wollen, dass sie drucken, verwenden Sie ein ‚Lil‘ (Liste der Listen)

table = [["Highway X", "NY", "Chicago"], 
     ["Highway Z", "LA", "Chicago"], 
     ["Highway X", "Austin", "Chicago"], 
     ["Highway ZZ", "Miami", "Chicago"]] 

Dann können Sie leicht

forma
for row in table: 
    print("{:12}{:8}{:10}".format(*row)) 
+0

Dies ist eine wirklich gute Alternative. Vielen Dank! – ThomasWest

Verwandte Themen