给定是长度为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
中的大量项目而言,这是非常低效的。必须有一种有效的方法来执行此任务。
任何想法和建议都将受到高度赞赏!
答案 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条记录