从python

时间:2016-09-17 11:18:11

标签: python

我将message_idmessage_writer_id保存在python列表中,如下所示:

composite_items = ['1:2', '2:2', '3:2', '4:1', '5:19', '20:2', '45:1', ...]

每个元素都是message_id:message_poster_id

从上面的列表中,我想提取所有set的{​​{1}}。即我想在 message_writer_ids之后提取包含所有唯一数字set,以便我最终得到:

:

在python中最有效的方法是什么?

目前,我想我会做类似的事情:

item_set = ['2', '1', '19']

想知道是否有更快的方法来实现这一目标。

2 个答案:

答案 0 :(得分:2)

你可以像这样使用set comprehension:

new_set = {item.partition(":")[2] for item in composite_items}

设置理解速度很快,与str.split()不同,str.partition()只会拆分一次并停止寻找更多冒号。与str.split(maxsplit=1)完全相同。

答案 1 :(得分:0)

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。

如果不存在,则将poster_id添加到字典并将其设置为0.