从python中的复合元素列表中提取集合



我将message_idmessage_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。

最新更新