You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 02:45:41