【问题标题】:Deleting indices from dictionary从字典中删除索引
【发布时间】:2019-09-16 23:04:42
【问题描述】:

Given 是一个在长度为 n 的列表中包含未排序索引的列表。列表的每个元素只包含一次。 所以列表看起来像这样

L = [13, 145, 70001, 34, ..., 533]

还给出了一个dictionary d,其中数值作为键。所有值都是元素 {0,1}。喜欢

d = {
        "[some data]" : 0,
        "[some data]" : 1,
        "[some data]" : 1,
        "[some data]" : 1,
        ...
        "[some data]" : 0
    }

字典d 中的条目比列表L 中的条目多得多。

我想要做的是从字典中删除L 中每个位置(索引)的数据,如果它是0

我在处理它时看到的问题是,在每次删除后索引需要移动,因为字典中的位置正在改变。对于L 中的大量项目,这是非常低效的。必须有一种有效的方法来完成这项任务。

非常感谢任何想法和建议!

【问题讨论】:

  • 你试过什么?在寻求帮助之前,您必须先自己动手。
  • 您的问题中缺少一些内容:1) 示例字典,2) 示例列表,3) 预期输出 4) 您解决问题的尝试。
  • 我不清楚您要完成什么。您能否提供具有相应输出的示例输入?请注意,字典没有索引
  • 1) 看 d,键值不相关 2) 看 L 3) 预期输出是字典,在以下位置 13、145、70001、34、...、533 上没有条目。 4) 删除位置 13 上的数据,而不是将 L 中的所有索引向左移动。所以新的 L 是 144, 70000, 33,...532, 4

标签: python list dictionary indexing processing-efficiency


【解决方案1】:

请注意,您不应该期望能够做到这一点,因为大多数 dictionary 实现没有排序,但 Python 是 since 3.6 和 3.7 中规范的一部分 - 但问题是。

我们可以使用带有enumerate 的字典理解来制作新字典,这样我们就不必担心担心的索引转换业务。 p>

L_ = set(L)
d = {k: v for i, (k, v) in enumerate(dict.items()) if i not in L_ and v}

【讨论】:

  • 这实际上看起来像我真正在寻找的东西。非常感谢!
【解决方案2】:

我建议不要直接删除该项目,而是使用例如更新它。 -1,最后你删除所有 -1 记录

【讨论】:

  • 因此,您遍历整个列表并查看每个键 2 至少两次。由于索引没有进一步排序。
  • @JürgenK。我不明白。当我更新值时,排序会受到怎样的影响?
【解决方案3】:

dictionary.keys()dictionary.values() 在 python 2 中都返回可索引列表

正如@grooveplex 所说,在python 3 中,您可以用list() 将每个包裹起来以达到相同的效果

【讨论】:

  • 在 Python 3 中,你可以这样做 list(dictionary.keys())
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-14
  • 2013-04-08
相关资源
最近更新 更多