gpt4 book ai didi

python - 有没有更好的方法来清理字典?

转载 作者:太空宇宙 更新时间:2023-11-04 08:50:10 25 4
gpt4 key购买 nike

我有dict,比如这个

data={k:k for k in range(20)}

我对 data 的值进行了一些操作,其中一些为 0,例如这个

for k,v in data.items():
data[k] %= 2

在执行此操作时,我想删除所有值为 0 的键,但在运行中会出现错误,因此我必须在最后执行此操作,因为我这样做了

def clean(data):
while True:
try:
for k,v in data.items():
if not v:
del data[k]
return
except RuntimeError:
pass

所以我的问题是:有一种更好的方法可以做到这一点,所以我可以就地进行移动,避免使用额外的内存,更好的是在一次旅行中?

编辑

这与我的预期用途相似

class MapDict(dict):

def __repr__(self):
return '{}({})'.format(self.__class__.__qualname__, super().__repr__())

def map(self,func,*argv):
'''applicate func to every value in this MapDict'''
for k,v in self.items():
self[k] = func(v,*argv)
self.clean()

def clean(self):
while True:
try:
for k,v in self.items():
if not v:
del self[k]
return
except RuntimeError:
pass


>>> data=MapDict( (k,k) for k in range(20) )
>>> data
MapDict({0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, 10: 10, 11: 11, 12: 12, 13: 13, 14: 14, 15: 15, 16: 16, 17: 17, 18: 18, 19: 19})
>>> from operator import add, mod
>>> data.map(mod,2)
>>> data
MapDict({1: 1, 3: 1, 5: 1, 7: 1, 9: 1, 11: 1, 13: 1, 15: 1, 17: 1, 19: 1})
>>> data.map(add,10)
>>> data
MapDict({1: 11, 3: 11, 5: 11, 7: 11, 9: 11, 11: 11, 13: 11, 15: 11, 17: 11, 19: 11})
>>>

所以这就是为什么我不能创建一个新的 dict,我只想在我的实例中保留相关的值,稍后我需要其他的东西。

那么有没有更好的方法来做到这一点?同时保持内存效率?并且行程最少?

最佳答案

不允许在迭代字典时从字典中删除项目,但您可以迭代键(或项目)的副本:

for k in list(data):
v = data[k]
if not v:
del data[k]

关于python - 有没有更好的方法来清理字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36367105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com