Измените значения в списке на значения, указанные в словаре?

#python #python-3.x #list #dictionary

#питон #python-3.x #Список #словарь

Вопрос:

У меня есть список, содержащий кортежи с парами, первый элемент-это имя (строка), второй-список, содержащий рестораны, в которых был этот человек. У меня есть диктант, содержащий десятки таких ресторанов. Поэтому, если человек А был в ресторанах (x,y,z) , следовательно, [('A', ['x', 'y', 'z'])] и в моем диктанте это указано {'x':10, 'y':23, 'z':33} . Как я могу заменить названия ресторанов на номера, указанные в словаре, содержащем названия? Имея выход [('A', [10, 23, 33])] . После этого я хочу подвести итог этим цифрам [('A', [66])] .

Спасибо. Вот код, который я использую:

 restaurants_attended = [('Aariz Lambert', ['The Beach Chimney', 'Parlay', 'The Private Exhibit']), ('Ariya Collier', ['Seawise', 'Enigma', 'Midnight'])]  
 {'The Beach Chimney': 201.0, "The Pirate's Harvest": 154.0, 'The Square Dragon': 132.0, 'The Spicy Trumpet': 266.0, 'Vertigo': 204.0, 'Drifters': 183.0, 'The Tulip': 156.0, 'Seawise': 136.0, 'Parlay': 140.0, 'The Modern Salmon': 176.0, 'The Bitter Windmill': 139.0, 'The Minty Window': 166.0, 'The Private Exhibit': 189.0, 'Enigma': 228.0, 'The Lighthouse': 159.0, 'Harlequin': 131.0, 'Midnight': 141.0, 'Gastrognome': 166.0}  

Комментарии:

1. Это не служба написания кода. Вы действительно пытались сделать что-нибудь из этого? Код, который вы используете, — это просто данные. Вам нужно задать более конкретный вопрос.

2. Я уже некоторое время пытаюсь это сделать, но просто не могу заставить это работать. Если я пройдусь по всему коду, это будет довольно долго, это только последний шаг.

Ответ №1:

Вы можете использовать понимание под диктовку:

 restaurants_attended = [('Aariz Lambert', ['The Beach Chimney', 'Parlay', 'The Private Exhibit']), ('Ariya Collier', ['Seawise', 'Enigma', 'Midnight'])] scores = {'The Beach Chimney': 201.0, "The Pirate's Harvest": 154.0, 'The Square Dragon': 132.0, 'The Spicy Trumpet': 266.0, 'Vertigo': 204.0, 'Drifters': 183.0, 'The Tulip': 156.0, 'Seawise': 136.0, 'Parlay': 140.0, 'The Modern Salmon': 176.0, 'The Bitter Windmill': 139.0, 'The Minty Window': 166.0, 'The Private Exhibit': 189.0, 'Enigma': 228.0, 'The Lighthouse': 159.0, 'Harlequin': 131.0, 'Midnight': 141.0, 'Gastrognome': 166.0}  output = {person: [scores[r] for r in rests] for person, rests in restaurants_attended} print(output) # {'Aariz Lambert': [201.0, 140.0, 189.0], 'Ariya Collier': [136.0, 228.0, 141.0]} output_sum = {person: sum(scores) for person, scores in output.items()} print(output_sum) # {'Aariz Lambert': 530.0, 'Ariya Collier': 505.0}  

Если вам нужны списки кортежей, как вы указали, используйте list , как в:

 print(list(output.items())) # [('Aariz Lambert', [201.0, 140.0, 189.0]), ('Ariya Collier', [136.0, 228.0, 141.0])]