从字典中删除索引

时间:2019-04-27 20:05:46

标签: python list dictionary indexing processing-efficiency

给定是长度为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中的大量项目而言,这是非常低效的。必须有一种有效的方法来执行此任务。

任何想法和建议都将受到高度赞赏!

3 个答案:

答案 0 :(得分:6)

请注意,您不应期望能够执行此操作,因为大多数dictionary实现都不是有序的,但是Python是since 3.6,并且是3.7中规范的一部分-只是问题所在。 / p>

我们可以将字典理解与enumerate结合使用来制作新字典,这样我们就不必担心担心担心的索引移位业务。

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

答案 1 :(得分:0)

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

作为@grooveplex注释,在python 3中,您可以用list()包裹每个包裹,以达到相同的效果

答案 2 :(得分:0)

我建议您使用以下方法更新该项目,而不是直接删除该项目: -1,最后删除所有-1条记录