gpt4 book ai didi

python - 从一个大列表中的多个字典中提取(间隔)值,并将这些值与另一个大列表中的相应列表组合

转载 作者:行者123 更新时间:2023-11-28 21:48:44 26 4
gpt4 key购买 nike

我有两个大列表。

第一个是w_list;一大列列表,其中包含 (1) 一个单词(例如“right”),(2) 一个起始 ID/标签(例如“#TWsp10”),以及 (3) 一个结束 ID/标签(例如“#TWep10”) . (这些话来自两个说话者之间的对话)。 w_list 的开始:

w_list = [['right', '#TWSp10', '#TWEp10'], ['_', '#TWSp11', '#TWEp11'], ['cough', '#TWSp12', '#TWEp12'], ['_', '#TWSp13', '#TWEp13'], ['go', '#TWSp14', '#TWEp14'], [...] , [...]]

第二个列表 (t_list) 是一个很大的字典列表。字典由 (1) 'xml:id' key 和相应的 id/tag 值(例如 'TWsp10', 'TWep10')组成,这些值类似于 w_list 中的开始和结束 id/tags,这意味着 t_list 中的字典数是w_list 中列表数量的两倍),(2) 'interval' 键,其值表示单词在对话中出现的时间,以及 (3) 一个不相关的 'since' 键。 t_list 的开始:

t_list = [{'interval': '0', 'xml:id': 'TWSp10', 'since': '#TW0'}, {'interval': '0.2108', 'xml:id': 'TWEp10', 'since': '#TW0'}, {'interval': '0.2108', 'xml:id': 'TWSp11', 'since': '#TW0'}, {'interval': '0.7049', 'xml:id': 'TWEp11', 'since': '#TW0'}, {'interval': '0.7049', 'xml:id': 'TWSp12', 'since': '#TW0'}, {'interval': '0.9223', 'xml:id': 'TWEp12', 'since': '#TW0'}, {'interval': '0.9223', 'xml:id': 'TWSp13', 'since': '#TW0'}, {'interval': '1.6568', 'xml:id': 'TWEp13', 'since': '#TW0'}, {'interval': '1.6568', 'xml:id': 'TWSp14', 'since': '#TW0'}, {'interval': '1.7886', 'xml:id': 'TWEp14', 'since': '#TW0'}, {...} , {...}]

这是我想创建的示例输出,有什么提示可以让我走上正确的道路/轨道吗?:

word: 'right' start: 0       end: 0.2108 
word: '_' start: 0.2108 end: 0.1049
word: 'cough' start: 0.7049 end: 0.9223
''
''

“类似于”:

'right' '#TWsp10': 0       '#TWsp10': 0.2108 
'_' '#TWsp11': 0.2108 '#TWep11': 0.1049
'cough' '#TWsp12': 0.7049 '#TWep12: 0.9223
''
''

用冒号创建单词、开始和结束字符串绝对不是问题。 它是如何从字典中提取间隔值(在 t_list 中)并将它们与列表(在 w_list 中)中各自的结束/开始 ID/标签相结合。

我很感激任何建议。

最佳答案

首先创建时间间隔的字典,标签作为键

time_dict = {i['xml:id'] : i['interval'] for i in t_list}

time_dict = 
{'TWEp10': '0.2108',
'TWEp11': '0.7049',
'TWEp12': '0.9223',
'TWEp13': '1.6568',
'TWEp14': '1.7886',
'TWSp10': '0',
'TWSp11': '0.2108',
'TWSp12': '0.7049',
'TWSp13': '0.9223',
'TWSp14': '1.6568'}

然后简单地遍历单词列表并检索时间

from collections import defaultdict
res = defaultdict(list)
for word, start, end in w_list:
res[word].append({'start':time_dict[start[1:]], 'end': time_dict[end[1:]] })

[1:] 从字符串中删除#

结果:

res = 
{
"go": [
{
"start": "1.6568",
"end": "1.7886"
}
],
"cough": [
{
"start": "0.7049",
"end": "0.9223"
}
],
"right": [
{
"start": "0",
"end": "0.2108"
}
],
"_": [
{
"start": "0.2108",
"end": "0.7049"
},
{
"start": "0.9223",
"end": "1.6568"
}
]
}

编辑:

time_dict 创建结果的替代方案

from operator import itemgetter
wlist2 = [(word, float(time_dict[start[1:]]), float(time_dict[end[1:]])) for word, start, end in w_list]
wlist2.sort(key = itemgetter(1))

此列表中的前十个元素:

('right', 0.0, 0.2108)
('_', 0.0, 1.0106)
('_', 0.2108, 0.7049)
('cough', 0.7049, 0.9223)
('_', 0.9223, 1.6568)
('nonvocal', 1.0106, 1.0688)
('_', 1.0688, 2.2074)
('go', 1.6568, 1.7886)
('south', 1.7886, 2.229)
('nonvocal', 2.2074, 2.4019)

关于python - 从一个大列表中的多个字典中提取(间隔)值,并将这些值与另一个大列表中的相应列表组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34813174/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com