【问题标题】:how do i sort through a json converted to list?我如何对转换为列表的 json 进行排序?
【发布时间】:2017-08-29 16:12:38
【问题描述】:

假设我有一个像这样的对象:

[
  {
    "id": 2,
    "name": "cat"
  },
  {
    "id": 6,
    "name": "dog"
  },
  {
    "id": 8,
    "name": "horse"
  },
  {
    "id": 10,
    "name": "turtle"
  }
]

我希望编写一个函数,它可以接受输入 id 并告诉我相关的名称。 如果为 animal_list 分配了该列表,我将如何找到与 6 相关联的动物?动物列表[id==6]?

【问题讨论】:

  • 我建议转换为由id 键入的单个dict,所以你可以只做complete_dict[6](并在O(1) 时间得到答案,而不是线性O(n) 时间)。

标签: python json list python-3.x


【解决方案1】:
list = [
  {
    "id": 2,
    "name": "cat"
  },
  {
    "id": 6,
    "name": "dog"
  },
  {
    "id": 8,
    "name": "horse"
  },
  {
    "id": 10,
    "name": "turtle"
  }
]


id = input("Enter ID..! ")

for data in list:
    if data.get('id') == id:
        print data.get('name')

【讨论】:

    【解决方案2】:

    您可以将数据作为 JSON 导入并使用 dict 结构进行处理。

    我创建了一个函数,如果有一个有效的键,它将返回动物名称,如果键不存在,则不返回。


    代码:

    s = '[{"id": 2,"name": "cat"},{"id": 6,"name": "dog"},{"id": 8,"name": "horse"},{"id": 10,"name": "turtle"}]'
    
    def search_animal(s, num):
        import json    
        data = json.loads(s)
        for d in data:
            if d['id'] == num:
                print(d['name'])
    
    search_animal(s, 2)
    search_animal(s, 6)
    

    输出:

    cat
    dog
    

    【讨论】:

      【解决方案3】:

      animal_list 是您在问题中给出的列表

      animal_list = [
            {
             "id": 2,
             "name": "cat"
            },
            {
             "id": 6,
             "name": "dog"
            },
            {
             "id": 8,
             "name": "horse"
            },
            {
             "id": 10,
             "name": "turtle"
            }
          ]
      def get_animal(id):
          found = 0
          for i in animal_list:
              if animal_list[i]["id"] == id :
                  found = 1
                  print animal_list[i]["name"]
          if found == 0:
                  print "animal not found"
      

      【讨论】:

        【解决方案4】:

        如果您可以像@ShadowRanger 所说的那样将列表转换为字典,那将是最好的,但如果您不能,您可以使用带有这样的 if 语句的列表推导:

        my_list = [
          {
            "id": 2,
            "name": "cat"
          },
          {
            "id": 6,
            "name": "dog"
          },
          {
            "id": 8,
            "name": "horse"
          },
          {
            "id": 10,
            "name": "turtle"
          }
        ]
        
        def get_by_id(the_list, id):
            found = [dict for dict in the_list if dict['id'] == id]
            if found:
                return found[0]
            return None 
        
        print(get_by_id(my_list, 6))
        
        # will output: {'id': 6, 'name': 'dog'}
        

        【讨论】:

          猜你喜欢
          • 2021-07-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-29
          • 2022-11-25
          • 1970-01-01
          • 2012-12-16
          相关资源
          最近更新 更多