Вход указывает на определенные элементы в списке кортежей

У меня есть следующий список кортежей:

EXCHANGE_DATA = [('AIA', 'Auckair', 1.50),
                 ('AIR', 'Airnz', 5.60),
                 ('AMP', 'Amp',3.22), 
                 ('ANZ', 'Anzbankgrp', 26.25),
                 ('ARG', 'Argosy', 12.22),
                 ('CEN', 'Contact', 11.22),
                 ('CNU', 'Chorus',3.01),
                 ('DIL', 'Diligent', 5.3),
                 ('DNZ', 'Dnz Property', 2.33),
                 ('EBO', 'Ebos', 1.1)]

Я хочу, чтобы пользователь вводил серию кодов (первый элемент в каждом кортеже) в этих кортежах, разделенных запятыми (например, AIA, AIR, AMP), и чтобы программа возвращала весь кортеж, на который ссылается ввод. к. Например, если на входе было AIA, AIR, AMP, программа вернет:

('AIA', 'Auckair', 1.50)
('AIR', 'Airnz', 5.60)
('AMP', 'Amp',3.22)

Я относительно новичок в программировании, поэтому любая помощь будет принята с благодарностью.


person user2101517    schedule 19.03.2013    source источник


Ответы (1)


Вам следует создать вспомогательный словарь. Это хороший способ избежать вложенных циклов.

>>> EXCHANGE_DATA = [('AIA', 'Auckair', 1.50),
...                  ('AIR', 'Airnz', 5.60),
...                  ('AMP', 'Amp',3.22), 
...                  ('ANZ', 'Anzbankgrp', 26.25),
...                  ('ARG', 'Argosy', 12.22),
...                  ('CEN', 'Contact', 11.22),
...                  ('CNU', 'Chorus',3.01),
...                  ('DIL', 'Diligent', 5.3),
...                  ('DNZ', 'Dnz Property', 2.33),
...                  ('EBO', 'Ebos', 1.1)]
>>> inp = "AIA,AIR,AMP"     # could come from input()
>>> exchange_dict = {i[0]:i for i in EXCHANGE_DATA}
>>> [exchange_dict[x] for x in inp.split(',')]
[('AIA', 'Auckair', 1.5), ('AIR', 'Airnz', 5.6), ('AMP', 'Amp', 3.22)]

Если ввод может содержать лишние пробелы, вы можете удалить их следующим образом

>>> [exchange_dict[x.strip()] for x in inp.split(',')]
[('AIA', 'Auckair', 1.5), ('AIR', 'Airnz', 5.6), ('AMP', 'Amp', 3.22)]
person John La Rooy    schedule 20.03.2013