【问题标题】:Python Split Nested Dictionary with No Key Value Pairs没有键值对的 Python 拆分嵌套字典
【发布时间】:2021-12-27 21:28:55
【问题描述】:

我有一个没有键值对的嵌套字典。我试图将它们分成具有单独列的数据框,并且不需要保留原始结构。目的是将每个可见行分隔为数据框中的实际行,其中列被命名为wordstart_timeend_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


【解决方案1】:

您基本上是在“添加”一组子列表。

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]]]

combine = sum(word_timestamps, [])
print(combine)

【讨论】:

  • 有趣,说得通。我刚刚意识到我在原始变量中有一个列表字典,并且已经解压缩了这部分,所以它实际上是一个嵌套列表。我只是使用列表理解来获得相同的结果——你对使用 [value for sublist in word_timestamps for value in sublist] 有什么想法?
  • 这也有效。个人喜好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-04
  • 2011-04-28
  • 1970-01-01
  • 2014-03-30
  • 2020-10-01
  • 2011-07-02
  • 1970-01-01
相关资源
最近更新 更多