【发布时间】:2021-12-27 21:28:55
【问题描述】:
我有一个没有键值对的嵌套字典。我试图将它们分成具有单独列的数据框,并且不需要保留原始结构。目的是将每个可见行分隔为数据框中的实际行,其中列被命名为word、start_time 和end_time。我尝试使用flatdict 将其展平,但由于没有命名键,它不起作用。
这是存储在变量word_timestamps 中的嵌套字典示例。
[[['hello', 3.06, 3.32]],
[['hi', 4.2, 4.32],
['can', 4.54, 4.62],
['i', 4.66, 4.7],
['please', 4.74, 4.86],
['speak', 4.9, 5.04],
['to', 5.06, 5.14],
['ashley', 5.2, 5.56]],
[['yeah', 6.84, 6.94],
['may', 7.04, 7.12],
['i', 7.12, 7.12],
['ask', 7.18, 7.28],
["who's", 7.36, 7.46],
['calling', 7.54, 7.86]]]
我可以使用word_timestamps[0] 格式成功查看其中的单个“行”。这返回:
[['hello', 3.06, 3.32]]
或者我可以使用返回 'hello' 的 word_timestamps[0][0][0] 访问单个单词。
我如何展平字典并摆脱整个结构?
编辑:添加以下所有内容。
我使用了[value for sublist in word_timestamps for value in sublist],它返回了与下面相同的答案。使用的完整代码是:
df_word_timestamps = pd.DataFrame([value for sublist in word_timestamps for value in sublist], columns =["word", "from", "to"])
结果:
word from to
0 hello 3.06 3.32
1 hi 4.20 4.32
2 can 4.54 4.62
3 i 4.66 4.70
4 please 4.74 4.86
... ... ... ...
1179 right 399.98 400.08
1180 bye-bye 400.64 400.86
1181 thanks 401.70 401.92
1182 bye 402.02 402.16
1183 bye 402.88 403.04
我这样做的原因是我可以在匹配的开始/停止时间加入第二个数据帧。第二个数据框包含说出这些话的人。我可以一起创建一个带标签的成绩单。
【问题讨论】:
-
那里根本没有字典。您有一组嵌套列表。你真正想要的是什么?您想要一个包含一堆三元素列表的列表吗?
标签: python json list dictionary