【问题标题】:Using isinstance() to remove integers from a json使用 isinstance() 从 json 中删除整数
【发布时间】:2020-07-05 14:30:33
【问题描述】:

我正在使用 Python 进行编码并使用包含 2 列数据的 JSON 文件;一个密钥,以及在我正在使用的数据中找到该密钥的次数。我的目标是删除所有整数键。

我已将 JSON 提取为 test_map,然后使用 keys() 方法创建键的字典(键)。我正在尝试使用isinstance 遍历键以识别键中的每个整数键。我还没有进入删除部分,但我注意到键中的每个键都被标识为字符串,所以isinstance 没有捕获任何东西。

如果有人对如何编写代码以捕获 int 键有任何想法,然后可能删除它们,我将不胜感激。我相信解决方案涉及铸造,但我无法弄清楚。

keys=test_map.keys()
for key in keys:
    if isinstance(key,int):
        print(f"key: {key}")

我已编辑以包含下面的 JSON 文件示例。我正在尝试使用整数键删除对象。

    {
    "run": 121,
    "'988844333',": 4,    <remove
    "123": 27,            <remove
    "brown": 19,
    "face": 345,
    "21554,": 4,          <remove
    "gain": 4,
    }

【问题讨论】:

  • “2 列数据”是什么意思? JSON 不是柱状的。
  • 列不正确。它是一个 json,有一个键和一个与该键关联的频率值。
  • Nick:这些被称为 JSON“对象”,是无序的名称/值对集合(参见 specification)。这些被标准库中的 json 模块翻译成 Python 字典。
  • edit 提出您的问题并添加一小部分 JSON 文件中的内容。
  • 我添加了我正在使用的 JSON 示例。感谢您的帮助。

标签: python json isinstance


【解决方案1】:

字符串的.isdigit() 方法检查字符串是否仅由数字组成。 这是doc

我们可以使用它来过滤整数键。

代码如下:

res = {k:v for k,v in test_map.items() if not k.isdigit()}

【讨论】:

  • @martineau 根据您的反馈使用 cmets 更新帖子。
【解决方案2】:

您可以尝试像这样进行投射。但是你需要写一个 try 除非 key 不能转换为 int。

keys = [key for key in test_map]
for key in keys:
    try:
        a = int(key)
        del test_map[key]
    except:
        pass

【讨论】:

  • 感谢您的反馈。当我运行它时,我得到一个运行时错误:字典在迭代期间改变了大小。从我查找的内容来看,问题是在迭代时从 test_map 中删除。
  • 感谢您的评论,您是对的,我已将其更改为不引用 test_map 键,而是复制它。
猜你喜欢
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
  • 2015-03-16
  • 2011-10-26
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
相关资源
最近更新 更多