如何从2个列表中删除重复元素并形成字典

时间:2019-04-09 05:59:25

标签: python python-3.x

我有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']

我正在尝试创建一个字典,将列表“ a”中的键映射到值 来自“ b”。我的输出应类似于

c={'Sensor': Source,'Microphone': Source,'IFE0': Process,'IFE1':Process,'GPU':Sink'}

如何过滤两个列表中的重复元素?

4 个答案:

答案 0 :(得分:4)

您可以使用zipdict comprehension直接制作字典:

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 = pairdict随后将删除重复的key;使用dict构造函数的版本执行相同的操作(只是不那么明确)。

答案 1 :(得分:0)

只需 dict(zip(a,b))

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')]

将映射两个列表 a b (元组列表)的相似索引。

现在将其转换为 dict 将为您提供独特的字典。

dict(zip(a, b))

output: {'GPU': 'Sink',
 'IFE0': 'Process',
 'IFE1': 'Process',
 'Microphone': 'Source',
 'Sensor': 'Source'}

答案 2 :(得分:-1)

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))

答案 3 :(得分:-2)

尝试先压缩它们,然后将它们变成一组(以丢弃重复项):

c = list(set(zip(a, b)))

然后根据需要将该列表变成字典:

d = {}
for k, v in c:
    d[k] = v

或者只是d = dict(c)

更简单-dict(zip(a,b))