TypeError bei Python-Programm?

Ich habe folgendes Programm:

import itertools

# Daten aus der Tabelle einlesen
data = []
with open('tour1.txt', 'r') as file:
    for line in file:
        parts = line.strip().split(',')
        data.append((parts[0], int(parts[1]), parts[2] == 'X'))

# Essentielle Tourpunkte auswählen
essential_points = [place for place, year, is_essential in data if is_essential]

# Funktion zur Berechnung der Teiltour
def calculate_tour(places, essential_places):
    min_distance = float('inf')
    min_tour = None

    for perm in itertools.permutations(essential_places):
        tour = [places[0][0]] + [places[i][0] for i in perm] + [places[0][0]]
        total_distance = 0

        for i in range(len(tour) - 1):
            total_distance += abs([x[1] for x in places if x[0] == tour[i]][0] - [x[1] for x in places if x[0] == tour[i + 1]][0])

        if total_distance < min_distance:
            min_distance = total_distance
            min_tour = tour

    return min_tour

# Sortieren der Orte nach ihrem Jahr
sorted_data = sorted(data, key=lambda x: x[1])

# Die Teiltour berechnen
shortest_tour = calculate_tour(sorted_data, essential_points)

# Ergebnis ausgeben
for point in shortest_tour:
    print(point, end=" -> ")
print(shortest_tour[0])  # Zum Startpunkt zurückkehren

Beim Ausführen wird mir folgender Fehler ausgegeben: TypeError: list indices must be integers or slices, not str

Die Textdatei ist nach dem Format "Brauerei,1613,X,0" (als Beispiel) aufgebaut.
Ich habe probiert das Problem durch ein voranstellen von Int() bei den Listen zu Lösen, was nicht funktioniert hat...
Gibt es eine andere Möglichkeit zur Lösung?

Vielen Dank!

Error, Programmiersprache, Python
Python: Kleinsten Wert mit dem größten Wert innerhalb einer Liste tauschen?

Ich habe folgende Methode:

def tausche_wertung(bester_Termin):
       bester_Termin[min], bester_Termin[max] = bester_Termin[max], bester_Termin[min]
       return bester_Termin

Dabei ist "bester_Termin" ein Ergebnis aus einem folgendem Code, der also immer unterschiedlich ausfällt (gearbeitet wurde mit datetime):

print("Bitte geben Sie die Namen oder Bezeichnungen der Mitglieder ein, die zum Treffen kommen sollen (Anmerkung: mit Komma getrennt)")
mitglieder = [name.strip() for name in input().split(",")]

print("Bitte geben Sie die mögliche Termine ein (Anmerkung: mit Komma getrennt und im Format TT.MM.JJJJ)")
termine = [[datetime.strptime(datum.strip(),"%d.%m.%Y"),0] for datum in input().split(",")]


for mitglied in mitglieder:
   for termin in termine:
       termin[1] += int(input(f"Wie gut passt {termin[0]:%A, der %d.%m.%Y} für {mitglied}? (0 = passt gut, 1= passt mäßig, 2 = passt schlecht oder beispielsweise in Noten): "))
   print()

# Den Durchschnitt aller Termine auflisten.
print("Durchschnitt pro Termin:")
for termin in termine:
   print(f"{termin[0]:%A, der %d.%m.%Y}: {termin[1]/len(mitglieder):.2f}")

# Den best-passendsten Termin raussuchen. Anmerkung: Wenn es mehrmals den gleichen Durchschnitt gibt, wird der früheste Termin ausgeben.
bester_Termin = min(termine, key=lambda termin:termin[1])

Als beispiel-print kommt folgendesheraus:

[datetime.datetime(3, 1, 1, 0, 0), 3]

In diesem Fall, war der dritte Termin der beste und die 1 war die kleinste Eingabe der 1. Person für irgendeinen Termin, die zweite 1 war die kleinste Eingabe der 4. Person, wieder für irgendeinen Termin und die beiden 0en waren von Person 2. und 3. schon für den dritten Termin eingeben und automatisch der kleinste Wert.

Die Liste wird also von Groß zu Klein aufgelisten sehe ich das richtig? Denn die vorliegende Liste wäre hier quasi [Person1., Person 4., Person 2., Person 3.] und nicht von 1-4 aufwärts?

Ausgabe:

Mein Ziel ist es erstmal die Werte für den besten Termin nur mit einer anderen Eingabe zu tauschen, wenn nicht bereits die kleinste Wertung für den Termin vorliegt. Das ist hier ja bereits gegeben, wenn ich es richtig sehe, denn die beiden 0en bleiben gleich.

Anschließend will ich, dass das Programm ausgibt wie oft ein Wechsel der Bewertung möglich ist, d.h. wenn es bereits die kleinste bzw. beste Wertung ist (0 ist hier die beste) wird nicht getauscht, ebenso wenn es nicht möglich ist, da alle Wertungen gleich waren o.ä.

Und dann soll das Programm, wenn möglich, noch ausgeben bei welchem Mitglied getauscht wurde, in diesem Fall bei Person 1.

Erläuterung Anhand Beispiel:

Mittwoch, der 01.01.0003 Termin ist der passendste, und Person 1 hat da eine 2, welche man mit der 1 der Wertung des ersten Termins tauschen kann.

Wunschprint: Es ist ein Wechsel der Bewertung möglich, und das bei Person 1

oder noch besser aber kein Zwang, wenn es zu kompliziert ist:

Es ist der Wechsel der Wertung des 3. mit der des 1. Termins bei Person 1 möglich.
Bild zum Beitrag
Computer, programmieren, Informatik
Weitere Inhalte können nur Nutzer sehen, die bei uns eingeloggt sind.