我有一本字典,其中一些与键对应的值是空列表。我想删除所有这样的密钥
d = {'Receipt total': [], 'Total Amount (AED)': [], 'Grand total': [], 'Net Amount': [], 'Total': ['105.00'], 'Total (AED)': [], 'Total Invoice Amount': [], 'Invoice total': ['105.00'], 'Amount Due': ['0.00']}
预期产出:
d = {'Total': ['105.00'], 'Invoice total': ['105.00'], 'Amount Due': ['0.00']}
我试过:
for key, value in d.items():
if value is None:
del d[k]
我的代码不起作用
您可以改为使用dictionary comprehension:
您可能需要显式检查该值是否为
[]
。否则,您可能会删除对False
(“假”)求值的内容,例如,您可能不想要的0值。当然,这一点只有在dict可以包含列表以外的内容作为值时才相关您可以这样使用字典理解:
输出:
{'Total': ['105.00'], 'Invoice total': ['105.00'], 'Amount Due': ['0.00']}
通过使用for循环删除字典中的项,它将引发
RuntimeError: dictionary changed size during iteration
你的思维至少有三个错误
第一个是空列表与
None
相同只有
None
与None
相同其次,比较列表时,应该使用
==
。使用is
来比较一个列表意味着,即使列表中有相同的值,如果它不是实际相同的内存地址,它也不会进行相等的比较另外,由于您只想知道列表是否为空,因此可以使用以下事实:在Python中,空序列被视为
False
,非空序列被视为True
,因此您可以使用布尔条件:if not value:
,它将是空列表的True
。如果值可以不是列表,那么空字符串、零等也都是False
,所以您可能需要更仔细地检查第三,在对容器进行迭代时,不应修改容器的大小,如
dict
。 可以对其副本进行迭代,也可以创建要修改的内容的记录,然后执行修改第一种方法是在副本上迭代:
第二种方法,制作一组要移除的键:
相关问题 更多 >
编程相关推荐