【问题标题】:How do I efficiently extract all elements in a column from a dictionary whose values are 2D lists in Python?如何有效地从字典中提取列中的所有元素,其值是 Python 中的二维列表?
【发布时间】:2020-05-24 05:00:51
【问题描述】:

我有一本字典,其值是列表的列表。

mydict = {
"A" : [["gactacgat", "IE"],["gactacgat", "IE"]],
"G" : [["ggctacgat", "EI"],["gactacgat", "IE"]],
"C" : [["gcctacgat", "N"],["gactacgat", "IE"]],
"T" : [["gtctacgat", "IE"],["gactacgat", "IE"]]
}

我正在尝试创建一个列表,其中包含这些 2D 列表的第二列中的所有元素。 这就是我正在做的事情:

  mylist = []
  for key in mydict.keys():
      for row in mydict[key]:
          mylist.append(row[1])

有没有比我所做的更有效的方法来访问这些列表中的所有列表中的特定索引?

(如果我的措辞不好,我深表歉意,感谢任何关于更好标题问题的反馈)

【问题讨论】:

  • 你的措辞很好,最重要的是,它符合你的代码。

标签: python algorithm dictionary multidimensional-array


【解决方案1】:

列表推导是你的朋友:

mylist = [row[1] for value in mydict.values() for row in value]

这使用了一个嵌套循环,但可能优化得更好一些。此外,使用dict.values 可以在外部循环的每次迭代中为您节省一次键查找,并以与键相同的顺序返回项目。

【讨论】:

  • 如果 OP 值是大小为 2 的列表的列表。那么索引有助于 mylist=[];for val in mydict.values():mylist.append(val[0][1]);mylist.append(val[1][1])
  • 正确,尽管我认为一般来说这不是一个安全的假设。
  • 您的答案适用于可变长度。通用解决方案有时效率较低。如果 OP 提到像列表列表对于每个键的大小为 2 等约束,那么我认为我们可以真正提出一种有效的方法。
  • 同意。到那时,OP 可能应该重新考虑他们的整个数据结构,但是是的,直接访问固定数量的行会减少循环开销。
猜你喜欢
  • 1970-01-01
  • 2023-03-21
  • 2018-07-20
  • 1970-01-01
  • 1970-01-01
  • 2018-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多