使用单个列表值作为键将多个列表组合成字典

时间:2019-01-08 16:09:47

标签: python list dictionary

背景:我正在将用户消息的PDF转换为文本文件,并尝试以结构化数据格式重建消息线程。

问题:我建立了一个函数来扫描文本的每一行,检测到thread_id并将该行标记为属于适当的thread_id,然后创建一个列表的结构如下:

thread_lines = [['1234567890', 'Dear James,']
                ['1234567890', 'See you soon.']
                ['5558881112', 'Foobar']]

每个内部列表的项目0为thread_id。理想情况下,我想创建一个字典,其中每个thread_id是一个键,并且同一thread_id的所有行都串联在一起作为相应的值。

代码:我有一个函数,在这里已省略,称为check_thread,该函数使用正则表达式来标识thread_id。下面是对每行进行扫描和分类的小功能。

def thread_create(text):
    thread_lines = []
    thread_id = None
    thread_dict = {}

    for line in range(len( text )):
        # is line beginning of new thread?
        if 'Thread' in text[line]:
            if check_thread(text[line]) != None:
                thread_id = check_thread(text[line])
            elif check_thread(text[line+1]) != None:
                thread_id = check_thread(text[line+1])

        #line belongs to current thread, do something
        if thread_id != None:
            thread_lines.append([thread, text[line]])

任何人都可以提供任何建议,或者以我需要的方式来整理这些数据吗?

1 个答案:

答案 0 :(得分:2)

如果我理解正确,应该这样做:

thread_lines = [['1234567890', 'Dear James,'],
                ['1234567890', 'See you soon.'],
                ['5558881112', 'Foobar']]


result = {}
for tid, sentence in thread_lines:
    result.setdefault(tid, []).append(sentence)

print(result)

输出

{'1234567890': ['Dear James,', 'See you soon.'], '5558881112': ['Foobar']}