【问题标题】:Getting list indices must be integers or slices, not str获取列表索引必须是整数或切片,而不是 str
【发布时间】:2018-11-02 01:57:03
【问题描述】:

编写一个名为“jsonFilter”的函数,它将 JSON 格式的字符串作为参数,采用对象数组的格式,其中每个对象都有“质量”、“密度”、“温度”和“速度”键,每个键映射到浮点数。此函数应将输入作为 JSON 字符串以相同格式返回,但仅包含速度大于 38.11 的对象。

import json
def jsonFilter(JSON):
    load = json.loads(JSON)
    for key, value in load["velocity"]:
        if value > 38.11:
            return load['velocity'][key]

我得到的列表索引必须是整数或切片,而不是 str。我做错了什么?

【问题讨论】:

  • JSON 长什么样子?
  • load 似乎已经是一本字典了。 load["velocity"] 是一个值,其中“速度”是关键。分享 JSON 的样子以获得更具体的答案
  • 我在输入 ['[{"density": 957.29, "mass": 46.42, "temperature": 73.39, "velocity": 97.98}, {"density": 167.29, “质量”:74.63,“温度”:26.29,“速度”:39.96}。
  • @Anonymous 期望的输出是什么?

标签: python json


【解决方案1】:

IIUC,做:

import json
def jsonFilter(JSON):
    load = json.loads(JSON)
    return json.dumps([i for i in load if i['velocity']>38.11])

现在:

print(jsonFilter(your_json))

是:

"[{'density': 957.29, 'mass': 46.42, 'temperature': 73.39, 'velocity': 97.98}, {'density': 167.29, 'mass': 74.63, 'temperature': 26.29, 'velocity': 39.96}]"

【讨论】:

  • 输出应该是速度大于38.11的所有物体,而不是整数值。
  • @Anonymous Now?
  • @Anonymous 那么在这种情况下需要什么输出?
  • @Anonymous 但这背后的逻辑是什么?
  • 对不起,这不是订购;只是您没有将代码转换为 JSON 字符串。
【解决方案2】:

在没有看到实际输入的情况下,这有点困难,但可能的问题是,正如您所说,您正在接收一个 JSON 数组并尝试通过键访问它。即,如果 JSON 参数是 json 对象的 json 数组,它将作为字典列表加载。列表只能通过整数访问。在这种情况下,为了能够访问任何给定对象的“速度”,您首先需要使用整数对该对象进行索引。

【讨论】:

    【解决方案3】:
    import json 
    def jsonFilter(JSON): 
        load = json.loads(JSON) 
        array = []
        for i in load:  
            if i['velocity'] > 38.11: 
                array.append(i)
        return json.dumps(array)
    

    【讨论】:

      猜你喜欢
      • 2020-08-09
      • 2016-05-25
      • 2017-10-09
      • 2015-12-09
      • 2021-09-01
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多