У меня есть 2 списка:
a=['Sensor', 'Sensor', 'Microphone', 'IFE0', 'IFE0', 'IFE0', 'IFE1',
'IFE1', 'IFE1', 'GPU', 'GPU', 'GPU']
и еще один список, который необходимо сопоставить с его элементами.
b=['Source', 'Source', 'Source', 'Process', 'Process', 'Process', 'Process',
'Process', 'Process', 'Sink', 'Sink', 'Sink']
Я пытаюсь создать словарь с ключом из списка «а», сопоставленным со значениями. от «б». Мой вывод должен выглядеть так
c = {'Sensor': Source,'Microphone': Source,'IFE0': Process,'IFE1':Process,'GPU':Sink'}
Как отфильтровать повторяющиеся элементы в обоих списках?
Попробуйте сначала заархивировать их, а затем превратить в набор (чтобы отбросить дубликаты):
c = list(set(zip(a, b)))
Затем превратите этот список в словарь, как хотите:
d = {}
for k, v in c:
d[k] = v
Или просто d = dict(c)
Еще проще - dict(zip(a,b))
вы можете напрямую создать словарь, используя zip
и понимание слова:
c = {key: value for key, value in zip(a, b)}
или более непосредственно с помощью конструктора dict
c = dict(zip(a, b))
чтобы получить
{'Sensor': 'Source', 'Microphone': 'Source', 'IFE0': 'Process',
'IFE1': 'Process', 'GPU': 'Sink'}
zip
перебирает значения ваших списков парами:
for pairs in zip(a, b):
print(pairs)
производит
('Sensor', 'Source')
('Sensor', 'Source')
('Microphone', 'Source')
('IFE0', 'Process')
('IFE0', 'Process')
('IFE0', 'Process')
('IFE1', 'Process')
('IFE1', 'Process')
('IFE1', 'Process')
('GPU', 'Sink')
('GPU', 'Sink')
('GPU', 'Sink')
эти записи затем преобразуются в словарь — сопоставление key, value = pair
. затем dict
удалит дубликаты key
; версия, использующая конструктор dict
, делает то же самое (только не так явно).
нет: zip
не заботится о дубликатах. это dict
удаляет их. и код, напечатанный выше, не будет производить ` 'GPU': 'Process'`; взгляните на вторую часть ответа.
('Датчик', 'Источник') ('Микрофон', 'Источник') ('IFE0', 'Источник') ('IFE1', 'Процесс') ('ГП', 'Процесс') ('IPE', 'Процесс') ('VENUS', 'Процесс') ('LPASS', 'Процесс') ('ЦП', 'Процесс') ('FD', 'Процесс') ('MDP', 'Процесс') ( «ФС», «Процесс») («Дисплей», «Процесс»)
Я получаю приведенный выше вывод после пары «zip» ........ IFE0 не является источником ... Он должен быть сопоставлен с процессом
это не тот список, который вы разместили. тогда список, который вы используете, не соответствует. zip
перебирает оба списка с одинаковой скоростью.
Извините, я запутался в списках......Пара почтовых индексов работает отлично.....Спасибо
a=['Sensor', 'Sensor', 'Microphone', 'IFE0', 'IFE0', 'IFE0', 'IFE1',
'IFE1', 'IFE1', 'GPU', 'GPU', 'GPU']
b=['Source', 'Source', 'Source', 'Process', 'Process', 'Process', 'Process',
'Process', 'Process', 'Sink', 'Sink', 'Sink']
c = dict(zip(a,b))
это никогда не приведет к более чем одному 'Source'
.
просто сделайте дикт (zip (а, б))
zip(a, b)
Output : [('Sensor', 'Source'),
('Sensor', 'Source'),
('Microphone', 'Source'),
('IFE0', 'Process'),
('IFE0', 'Process'),
('IFE0', 'Process'),
('IFE1', 'Process'),
('IFE1', 'Process'),
('IFE1', 'Process'),
('GPU', 'Sink'),
('GPU', 'Sink'),
('GPU', 'Sink')]
будет отображать аналогичный индекс обоих списков а и б (список кортежей).
Теперь преобразование его в диктовать даст вам уникальный словарь.
dict(zip(a, b))
output: {'GPU': 'Sink',
'IFE0': 'Process',
'IFE1': 'Process',
'Microphone': 'Source',
'Sensor': 'Source'}
как именно это добавляет какую-либо новую ценность по сравнению с сообщениями, приведенными ранее?
@ user3053452, если вы можете проверить отредактированную историю этого сообщения, вы получите ответ
Пробовал это, но 'zip' создает неповторяющиеся элементы из списка 'a', но список 'b' не сопоставляется в соответствии с ним, я получаю {'Датчик': 'Источник', 'Микрофон': 'Источник ', 'IFE0': 'Источник', 'IFE1': 'Процесс', 'GPU': 'Процесс....'}