#python #list #dictionary
#питон #Список #словарь
Вопрос:
У меня есть следующий словарь, network_values
network_values = { 0: "CGR cinémas", 1: "Ville de Choisy-le-Roi", 2: "Pathé Gaumont", 3: "UGC", 4: "Cinéode", 5: "Magestic", 6: "Cinéville", 7: "cinebus", 8: "CGR", 9: "Utopia", 10: "Écran mobile 74" }
У меня есть еще theater_values
один словарь, с вложенными списками
theater_values = { "0":[ "node/4522090127", 1.0, 300.0, "Saint-Jean-Pied-de-Port", "nan" ], "1":[ "node/563839797", 2.0, 239.0, "Barbezieux-Saint-Hilaire", "nan" ], "2":[ "node/5472582580", "nan", "nan", "Lezay", "nan" ], "3":[ "node/7623662713", 2.0, 280.0, "Montaigu-Vendée", "nan" ], "4":[ "node/4115072853", 1.0, 274.0, "Chalonnes-sur-Loire", "nan" ], "5":[ "node/5250851417", 3.0, 341.0, "Thiers", "nan" ], "6":[ "way/83676895", 3.0, 534.0, "Argentan", "nan" ], "7":[ "node/502262289", 8.0, 1898.0, "Tours", "CGR cinémas" ], "8":[ "node/3475038904", "nan", "nan", "Saint-Étienne", "nan" ], "9":[ "way/146090090", "nan", "nan", "Marcoussis", "nan" ], "10":[ "way/66143799", "nan", "nan", "Choisy-le-Roi", "Ville de Choisy-le-Roi" ], "11":[ "node/7768900435", 12.0, 2139.0, "Paris", "Pathé Gaumont" ] }
Цель состоит в том , чтобы, когда подобное значение CGR cinémas
существует во вложенном списке theater_values
, а также network_values
я обновляю theater_values
его с помощью ключей network_values
.
Если CGR cinémas
существует в network_values
и theater_values
, я обновлю значение theater_values
до 0
(возможно целое число или символ).
Это то, что я сделал, но это не делает того, что должно
def proto_csv(theater_values): network_values = {0: 'CGR cinémas', 1: 'Ville de Choisy-le-Roi', 2: 'Pathé Gaumont', 3: 'UGC', 4: 'Cinéode', 5: 'Magestic', 6: 'Cinéville', 7: 'cinebus', 8: 'CGR', 9: 'Utopia', 10: 'Écran mobile 74} for keys_theaters,vals_theaters in theater_values.items(): for keys_networks,vals_networks in network_values.items(): if vals_theaters == vals_networks: theater_values[keys_theaters] = str(keys_networks) return theater_values
Я немного запутался в том, как это сделать, так как мой код не дает мне желаемых результатов или каких-либо результатов на самом деле…
Обновленный результат будет таким
theater_values = { "0":[ "node/4522090127", 1.0, 300.0, "Saint-Jean-Pied-de-Port", "nan" ], "1":[ "node/563839797", 2.0, 239.0, "Barbezieux-Saint-Hilaire", "nan" ], "2":[ "node/5472582580", "nan", "nan", "Lezay", "nan" ], "3":[ "node/7623662713", 2.0, 280.0, "Montaigu-Vendée", "nan" ], "4":[ "node/4115072853", 1.0, 274.0, "Chalonnes-sur-Loire", "nan" ], "5":[ "node/5250851417", 3.0, 341.0, "Thiers", "nan" ], "6":[ "way/83676895", 3.0, 534.0, "Argentan", "nan" ], "7":[ "node/502262289", 8.0, 1898.0, "Tours", "O" #here ], "8":[ "node/3475038904", "nan", "nan", "Saint-Étienne", "nan" ], "9":[ "way/146090090", "nan", "nan", "Marcoussis", "nan" ], "10":[ "way/66143799", "nan", "nan", "Choisy-le-Roi", "Ville de Choisy-le-Roi" ], "11":[ "node/7768900435", 12.0, 2139.0, "Paris", "1" #here ] }
Комментарии:
1. Можете ли вы привести пример
network_values
того, как должно выглядеть обновленное приложение?2. @совпадение, конечно. Позвольте мне уточнить вопрос. Выполнено.
Ответ №1:
Первое, что нужно сделать, это закрыть кавычки для 'Écran mobile 74
в вашем словаре, так как код, который вы вставили, возвращается SyntaxError
.
Затем в if
операторе, в котором вы в данный момент сравниваете словари со строками, выражение никогда не бывает истинным. Вы хотите посмотреть, есть ли строка в значениях словаря, и обновить этот элемент словаря, если да:
if vals_networks in vals_theaters: theater_values[keys_theaters][vals_theaters.index(vals_networks)] = str(keys_networks)
Это дает результат:
{ '0': ['node/4522090127', 1.0, 300.0, 'Saint-Jean-Pied-de-Port', 'nan'], '1': ['node/563839797', 2.0, 239.0, 'Barbezieux-Saint-Hilaire', 'nan'], '2': ['node/5472582580', 'nan', 'nan', 'Lezay', 'nan'], '3': ['node/7623662713', 2.0, 280.0, 'Montaigu-Vendée', 'nan'], '4': ['node/4115072853', 1.0, 274.0, 'Chalonnes-sur-Loire', 'nan'], '5': ['node/5250851417', 3.0, 341.0, 'Thiers', 'nan'], '6': ['way/83676895', 3.0, 534.0, 'Argentan', 'nan'], '7': ['node/502262289', 8.0, 1898.0, 'Tours', '0'], '8': ['node/3475038904', 'nan', 'nan', 'Saint-Étienne', 'nan'], '9': ['way/146090090', 'nan', 'nan', 'Marcoussis', 'nan'], '10': ['way/66143799', 'nan', 'nan', 'Choisy-le-Roi', '1'], '11': ['node/7768900435', 12.0, 2139.0, 'Paris', '2'] }