#python #dictionary #linear-programming #distance-matrix
Вопрос:
Я работаю над моделью проблемы местоположения объекта и хотел бы создать словарь, содержащий эту матрицу расстояний,
Я хочу, чтобы ключи соответствовали комбинации между первым элементом каждой строки и заголовком, как это (вроде) «Spa» «SP_Andrimont» : 12275, «Spa» «SP_Pepinster» : 10626,81,…
Поэтому мне было интересно, возможно ли это ? Если да, то как бы вы это сделали ? Если нет, то каковы альтернативы? Новичок в python и программировании здесь, так что любая помощь будет очень признательна.
спасибо, ребята
Комментарии:
1. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.
Ответ №1:
Это не очень чисто, но я хотел предоставить опцию, которая не использует внешние библиотеки. Вот содержание test_csv
:
city;SP_A;SP_B
A;5;2
B;6;3
C;2;7
D;7;3
И вот код:
import csv
# Open csv file and add rows to list
with open('test_csv.csv', newline='') as file:
rows = [row for row in csv.reader(file, delimiter=';')]
# Extract headers and indices (locations)
locations_a = [row[0] for row in rows[1:]]
locations_b = [header for header in rows[0][1:]]
# Create dict distance matrix
dist_matrix = {}
for i, loc_a in enumerate(locations_a):
dist_matrix[loc_a] = {}
for j, loc_b in enumerate(locations_b):
dist_matrix[loc_a][loc_b] = rows[i 1][j 1]
# Print matrix
print(dist_matrix)
# Test location pair
print(dist_matrix['A']['SP_B'])
Выход:
{'A': {'SP_A': '5', 'SP_B': '2'}, 'B': {'SP_A': '6', 'SP_B': '3'}, 'C': {'SP_A': '2', 'SP_B': '7'}, 'D': {'SP_A': '7', 'SP_B': '3'}}
и
2
Если вы хотите, вы можете сделать это намного короче с помощью библиотеки pandas и ее DataFrame.to_dict()
метода.
Комментарии:
1. Большое спасибо, чувак, это сработало. Благослови тебя и твой род на века вперед!!