如何从Python字典中移除整数值条目,保留浮点值条目?
问题:移除字典中值为整数0的条目
给定如下字典:
{ 'Afghanistan': 0.0, 'Albania': 0, 'Algeria': 50.0, 'Angola': 51.85185185185185, 'Vietnam': 48.333333333333336, 'Yemen': 25.0, 'Zambia': -105.55555555555556, 'Zimbabwe': -570.0, 'Global': -24.358974358974358 }
需求:仅移除值为整数类型0的条目(即'Albania'),保留值为浮点类型0.0的'Afghanistan'及其他所有条目。
你的代码问题分析
你写的嵌套循环存在多处错误:
- 字典不是序列类型,
y是字典的键,不能用y[x]的方式取值; - 遍历字典时直接调用
pop会触发异常(遍历过程中字典大小改变); issubclass(type(y[x]), int)的判断逻辑完全偏离需求,应该直接判断值的类型和具体数值。
正确解法
方法1:字典推导式(推荐)
直接生成新字典,只保留符合条件的键值对:
original_dict = { 'Afghanistan': 0.0, 'Albania': 0, 'Algeria': 50.0, 'Angola': 51.85185185185185, 'Vietnam': 48.333333333333336, 'Yemen': 25.0, 'Zambia': -105.55555555555556, 'Zimbabwe': -570.0, 'Global': -24.358974358974358 } filtered_dict = {k: v for k, v in original_dict.items() if not (type(v) is int and v == 0)} print(filtered_dict)
执行后会自动排除'Albania',保留其余所有条目。
方法2:遍历字典副本修改原字典
如果需要直接修改原字典,可以遍历原字典键的副本,避免遍历过程中字典结构变化引发的异常:
for k in list(original_dict.keys()): v = original_dict[k] if type(v) is int and v == 0: original_dict.pop(k)
这种方法会直接对原字典进行修改,达到需求效果。
注:这里用type(v) is int而非isinstance(v, int),是因为bool是int的子类,isinstance(True, int)会返回True,用type(v) is int能严格区分整数和其他类型。
内容的提问来源于stack exchange,提问作者user20266627
相关产品推荐
相关产品推荐

