Как обновить словарь с вложенным списком с помощью словаря?

#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'] }