python - 如果元组有共同元素,则合并 Python 中的元组,并将所有不同元素连接到其位置

标签 python merge tuples

我在 Python 将一些元组与公共(public)项合并时遇到问题。关键是我只想拥有一个元组,但也可以保留不同的项目,可能是通过将它们连接到它们所在的位置来实现的。

我正在分析与视频相关的约 10 万条字幕,并专门寻找其中的动词。 我有一个很大的元组列表,如下所示:

(verb, caption, video_id)

重点是,如果标题中存在多个动词,则在我的列表中它会出现多次:

list = [(verb1, caption, video_id), (verb2, caption, video_id), (verb3, caption, video_id)]

我想获得这个:

(verb1|verb2|verb3, caption, video_id)

(| 不是强制性的,我只是想将所有 3 个动词放在元组的第一个位置)

我需要这个,因为我要将其输出到 csv 文件以进行手动检查,并且我想避免多次检查相同的 captionvideo_id

这是一个更可靠的例子:

list = [
  ('look', 'Mario takes the bag, looks around and runs away.','video_id_001'),
  ('run',  'Mario takes the bag, looks around and runs away.','video_id_001'),
  ('take', 'Mario takes the bag, looks around and runs away.','video_id_001')
]

最佳答案

collections.defaultdict是你的 friend 。

from collections import defaultdict

lst = [('verb1', 'caption', 'video_id'),
       ('verb2', 'caption', 'video_id'),
       ('verb3', 'caption', 'video_id')]

aggregator = defaultdict(list)

# first create a dictionary mapping (caption, video_id) -> verb
for i, j, k in lst:
    aggregator[(j, k)].append(i)

# then reverse dictionary
result = [tuple(('|'.join(v), k[0], k[1])) for k, v in aggregator.items()]

# [('verb1|verb2|verb3', 'caption', 'video_id')]

关于python - 如果元组有共同元素,则合并 Python 中的元组,并将所有不同元素连接到其位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48467833/

相关文章:

python - 什么是验证多个复杂条件的好模式?

python - 如何将按钮添加到 QTreeView 行

python - 按公共(public)行将两个大文本文件合并到一个映射文件

Git:如何恢复 merge 和其他两个相邻提交?

c++ - 增加元组类型的 hana 大小

python - GenExp 上的 Tuple() 与 ListComp

对和元组的piecewise_construct 的C++11 用例?

python - 将参数集列表传递给函数

python - 如何重新排列数据框中的行并获得与 pandas 中其他两列具有百分比差异的新列?

Git branch --merged/--no-merged 和 --squash 选项