我将message_id
和message_writer_id
一起维护在python列表中,如下所示:
composite_items = ['1:2', '2:2', '3:2', '4:1', '5:19', '20:2', '45:1', ...]
其中每个元素都是CCD_ 3。
从上面的列表中,我想提取所有message_writer_ids
中的set
。也就是说,我想提取一个包含:
之后的所有唯一数字的set
,这样我就可以得到:
item_set = ['2', '1', '19']
在python中,最有效的方法是什么?
目前,我想我会做一些类似的事情:
new_list = []
for item in composite_items:
element = item.split(":")[1]
new_list.append(element)
new_set = set(new_list)
我想知道是否有更快的方法来实现这一点。
您可以使用这样的集合理解:
new_set = {item.partition(":")[2] for item in composite_items}
集合理解很快,而且与str.split()
不同,str.partition()
只拆分一次,并停止寻找更多的冒号。与str.split(maxsplit=1)
完全相同。
composite_items = ['1:2', '2:2', '3:2', '4:1', '5:19', '20:2', '45:1', ...]
posters = dict()
for element in composite_items:
poster_id = element.split(":")[1]
posters[poster_id] = posters.get(poster_id, 0) + 1
您可以使用字典,还可以计算message_poster_id
发送的邮件数量。posters.get(poster_id,0) + 1
检查海报是否存在。如果存在,则获取其值(消息数(并将其递增1。
如果不存在,则将posteri_id添加到dictionary并将其设置为0。