【发布时间】:2019-12-11 20:48:25
【问题描述】:
我有两个字典列表。两者都包含一项数据以及一个开始和停止时间戳。第一个列表包含表示对具有开始和停止时间的文本序列的观察的字典。它看起来像这样:
list_1 = [
{'word': 'hey hows it going?', 's1': 1.2, 's2': 3.6},
{'word': 'um', 's1': 3.7, 's2': 4.2},
{'word': 'its raining outside today', 's1': 4.3, 's2': 5.0},
{'word': 'and its really cold', 's1': 5.1, 's2': 6.6},
{'word': 'dont you think?', 's1': 6.7, 's2': 8.1},
{'word': 'its awful', 's1': 7.7, 's2': 9.0}
]
第二个列表包含表示对具有开始和停止时间的类别的观察的字典。它看起来像这样:
list_2 = [
{'category': 0, 's1': 0.0, 's2': 3.8},
{'category': 1, 's1': 3.9, 's2': 4.9},
{'category': 1, 's1': 5.0, 's2': 7.2},
{'category': 0, 's1': 7.3, 's2': 7.6},
{'category': 1, 's1': 7.7, 's2': 9.0}
]
我想根据以下逻辑使用list_1['word'] 值在list_2 的字典中创建一个新项目:
如果来自
list_1['s1']的值大于来自list_2['s1']的值且小于来自list_2['s2']的值,则将来自list_1['word']的所有值附加到新项目list_2['word']中。如果来自
list_1['s1']的值大于来自list_2['s1']的值且小于来自list_2['s2']的值,但list_1['s2']大于来自list_2['s1']的值,则追加来自list_1['word']进入新项目,list_2['word']用于 NEXT 字典。
另一种思考方式是在循环 list_1 和 list_2 时:
如果来自
list_1项目的时间戳在list_2项目的时间戳内,则将list_1单词添加到list_2中的新键值对中。如果来自
list_1项目的时间戳不属于list_2项目的时间戳,例如list_2[0]中的单词“开始”但list_2[1]中的“结束”,然后添加@987654345 @ 从list_1[0]到list_2[1]。
应该是这样的:
expected_output =[
{'category': 0,
's1': 0.0,
's2': 3.8,
'words': 'hey hows it going? um'},
{'category': 1,
's1': 3.9,
's2': 4.9,
'words': 'its raining outside today'},
{'category': 1,
's1': 5.0,
's2': 7.2,
'words': 'and its really cold'},
{'category': 0,
's1': 7.3,
's2': 9.0,
'words': 'dont you think? its awful'}
]
【问题讨论】:
-
您的两个“列表”只有 1 个元素,它是一个字典,其顺序整数键从 0 开始(因此它们的索引与列表非常相似)是有意的吗?您概述了非常清晰的逻辑,我假设您的代码无法按您想要的方式工作?你能分享你到目前为止的情况并解释哪里出了问题吗?
-
感谢您的反馈。我看到每个都是一个 1 元素列表。为简单起见,如果您更有效率,我可以通过删除顺序整数键来转换为字典列表。在代码方面,我不确定从哪里开始。
标签: python list dictionary