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

问题描述 投票:-1回答:4

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

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

python python-3.x
4个回答
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'}


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 = pair。然后dict将删除重复的keys;使用dict构造函数的版本也是如此(只是不那么明确)。


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

-2
投票

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

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

然后根据需要将该列表转换为字典:

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

或者只是d = dict(c)

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

© www.soinside.com 2019 - 2024. All rights reserved.