Как удалить повторяющиеся элементы из 2 списков и сформировать словарь

У меня есть 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'}

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
82
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Попробуйте сначала заархивировать их, а затем превратить в набор (чтобы отбросить дубликаты):

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' создает неповторяющиеся элементы из списка 'a', но список 'b' не сопоставляется в соответствии с ним, я получаю {'Датчик': 'Источник', 'Микрофон': 'Источник ', 'IFE0': 'Источник', 'IFE1': 'Процесс', 'GPU': 'Процесс....'}

nagashree Upadhya 09.04.2019 08:13

нет: zip не заботится о дубликатах. это dict удаляет их. и код, напечатанный выше, не будет производить ` 'GPU': 'Process'`; взгляните на вторую часть ответа.

hiro protagonist 09.04.2019 08:17

('Датчик', 'Источник') ('Микрофон', 'Источник') ('IFE0', 'Источник') ('IFE1', 'Процесс') ('ГП', 'Процесс') ('IPE', 'Процесс') ('VENUS', 'Процесс') ('LPASS', 'Процесс') ('ЦП', 'Процесс') ('FD', 'Процесс') ('MDP', 'Процесс') ( «ФС», «Процесс») («Дисплей», «Процесс»)

nagashree Upadhya 09.04.2019 08:23

Я получаю приведенный выше вывод после пары «zip» ........ IFE0 не является источником ... Он должен быть сопоставлен с процессом

nagashree Upadhya 09.04.2019 08:24

это не тот список, который вы разместили. тогда список, который вы используете, не соответствует. zip перебирает оба списка с одинаковой скоростью.

hiro protagonist 09.04.2019 08:25

Извините, я запутался в списках......Пара почтовых индексов работает отлично.....Спасибо

nagashree Upadhya 09.04.2019 08:34
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'.

hiro protagonist 09.04.2019 08:07
Ответ принят как подходящий

просто сделайте дикт (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 09.04.2019 08:54

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

Umesh 09.04.2019 08:56

Другие вопросы по теме