Прервать цикл, когда list len достигнет 5 (В цикле for)

Я создаю простую программу на python и пытаюсь отфильтровать некоторые ответы на основе предела для запуска цикла for или цикла while.

Что я пытаюсь сделать?

Я пытаюсь остановить цикл, когда список len достигнет 5. Это может быть цикл for и цикл while.

views.py

def filter_array(request):
   new_array = []
   count = 1
   quit = False
   
   for m in res.get("blogs"):
      for likes in m.get("likes"):
         try:
             count += 1
             if likes == "user_1":
                 new_array.append(likes)

             if count == 5:
                 quit = True
                 break
         except:
                 quit = True
                 break
   print(new_array)

   return new_array

json ответ в views.py

res = {
   "blogs": [
      {
         "title": "Blog 1",
         "description": "Blog description",
         "likes": [
            "user_1",
            "user_2",
         ]
      },
      {
         "title": "Blog 2",
         "description": "Blog description",
         "likes": [
            "user_4",
            "user_5",
         ]
      },
      {
         "title": "Blog 3",
         "description": "Blog description",
         "likes": [
            "user_3",
         ]
      },
      {
         "title": "Blog 4",
         "description": "Blog description",
         "likes": [
            "user_3",
            "user_4",
            "user_5",
         ]
      },
      {
         "title": "Blog 5",
         "description": "Blog description",
         "likes": [
            "user_4",
            "user_5",
         ]
      },
   ]
}

Когда я выполняю приведенный выше код, он добавляет все элементы json в массив. Но я хочу добавлять в список, если "likes" есть user_1 и останавливать цикл, когда len списка достигнет 5.

Я пробовал много часов, но он все еще не работает.

Любая помощь будет очень признательна.

Я не уверен, что именно вы пытаетесь сделать, но, насколько я понимаю, попробуйте следующее:

def filter_array(request):
    new_array = []
    count = 1
    flag = False
    for m in res.get("blogs"):
        for likes in m.get("likes"):
            try:
                count += 1
                if likes == "user_1":
                    new_array.append(likes)

                if count == 5:
                    flag = True
                    break
            except:
                flag = True
                break
        if flag: # break if flag is True
            break
    print(new_array)
    return new_array

Изменения

  1. Используйте flag вместо quit, потому что quit() является встроенной функцией.
  2. Добавлена проверка флага во внешнем for-петле.

Вы можете получить первые пять элементов списка с помощью среза. Примерно так:

def filter_array(request):
    all_likes = []
    for likes in m.get("likes", [])
        all_likes.extend(likes)
    return all_likes[:5]

Не усложняйте ситуацию больше, чем нужно. Например, здесь нет причин для try...except.

break вырывается только из одного цикла. Поскольку у вас есть второй цикл, вложенный внутрь первого цикла, вам нужен еще один break.

def filter_array(request):
   new_array = []
   count = 1
   
   for m in res.get("blogs"):
      for likes in m.get("likes"):
         count += 1
         if likes == "user_1":
            new_array.append(likes)
            
         if count == 5:
            break
      if count == 5:
         break
   print(new_array)
   
   return new_array

IIUC это все, что вам нужно:

res = {
    "blogs": [
      {
          "title": "Blog 1",
          "description": "Blog description",
          "likes": [
              "user_1",
              "user_2",
          ]
      },
        {
          "title": "Blog 2",
          "description": "Blog description",
          "likes": [
              "user_4",
              "user_5",
          ]
      },
        {
          "title": "Blog 3",
          "description": "Blog description",
          "likes": [
              "user_3",
          ]
      },
        {
          "title": "Blog 4",
          "description": "Blog description",
          "likes": [
              "user_3",
              "user_4",
              "user_5",
          ]
      },
        {
          "title": "Blog 5",
          "description": "Blog description",
          "likes": [
              "user_4",
              "user_5",
          ]
      },
    ]
}

new_list = []

for dict_ in res['blogs']:
    if 'user_1' in dict_.get('likes', []):
        new_list.append(dict_)
        if len(new_list) == 5:
            break

print(new_list)

Выход:

[{'title': 'Blog 1', 'description': 'Blog description', 'likes': ['user_1', 'user_2']}]
Вернуться на верх