Skip to main content
 首页 » 编程设计

python之使用列表理解生成字典列表的问题

2025年05月04日12jillzhang

feed_mapping = {'BC': 11, 'HA':12, 'AB':16,'GR':18} 
x = ['AB-16007891', 'HA-4625798','GR-4444545','BC-4447764','HA-46257854'] 
feed = [{"feed": feed_mapping[i.split('-')[0]],"id":[i]} for i in x] 
print(feed) 

通过上面的列表理解,我可以生成字典列表。我需要将值附加到 id如果feed值相同

当前输出:

[{'feed': 16, 'id': ['AB-16007891']}, {'feed': 12, 'id': ['HA-4625798']}, {'feed': 18, 'id': ['GR-4444545']}, {'feed': 11, 'id': ['BC-4447764']}, {'feed': 12, 'id': ['HA-46257854']}] 

预期输出:

[{'feed': 16, 'id': ['AB-16007891']}, {'feed': 12, 'id': ['HA-4625798','HA-46257854']}, {'feed': 18, 'id': ['GR-4444545']}, {'feed': 11, 'id': ['BC-4447764']}] 

请您参考如下方法:

使用 itertools.groupby

例如:

from itertools import groupby 
feed_mapping = {'BC': 11, 'HA':12, 'AB':16,'GR':18} 
x = ['AB-16007891', 'HA-4625798','GR-4444545','BC-4447764','HA-46257854'] 
x.sort() 
 
feed = [{"feed": feed_mapping[k], "id": list(v)} for k, v in groupby(x, lambda x: x.split('-')[0])] 
print(feed) 

输出:

[{'feed': 16, 'id': ['AB-16007891']}, 
 {'feed': 11, 'id': ['BC-4447764']}, 
 {'feed': 18, 'id': ['GR-4444545']}, 
 {'feed': 12, 'id': ['HA-46257854', 'HA-4625798']}]