给定是在长度为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
的大量物品来说,这是非常低效的。必须有一种有效的方法来完成这项任务。
任何想法和建议都非常感谢!
请注意,您不应该期望能够这样做,因为大多数dictionary实现都没有被排序,但Python是since 3.6并且是3.7中规范的一部分 - 但问题就在于此。
我们可以使用enumerate
的词典理解来创建一个新词典,这样我们就不必担心担心你的索引转移业务。
L_ = set(L)
d = {k: v for i, (k, v) in enumerate(dict.items()) if i not in L_ and v}
dictionary.keys()
和dictionary.values()
都返回python 2中的可索引列表
正如@grooveplex所指出的那样,在python 3中,你可以使用list()
将每个包装起来以获得相同的效果
我建议您不要直接删除该项目,而是使用例如-1并最后删除所有-1条记录