在某些条件下将列表分成子列表

时间:2017-04-15 10:20:54

标签: python python-3.x

我有一个如下列表 -

[
    {     
      "ques_id": "154",
      "cat_id": "1",     
    },
    {     
      "ques_id": "155",
      "cat_id": "1",     
    },
    {     
      "ques_id": "156",
      "cat_id": "2",     
    },
    {     
      "ques_id": "157",
      "cat_id": "2",     
    }]

我想要下面的子列表 -

[
    {     
      "ques_id": "154",
      "cat_id": "1",     
    },
    {     
      "ques_id": "155",
      "cat_id": "1",     
    }
]

   [{     
      "ques_id": "156",
      "cat_id": "2",     
    },
    {     
      "ques_id": "157",
      "cat_id": "2",     
    }]

请帮我解决这个问题。

3 个答案:

答案 0 :(得分:0)

你可以这样做,因为这是一个列表,你可以使用列表切片根据你的愿望breack。既然你没有指定你需要打破列表的条件我假设你想把它从你的问题中分成两半,那么答案就是

list1 = [
    {     
      "ques_id": "154",
      "cat_id": "1",     
    },
    {     
      "ques_id": "155",
      "cat_id": "1",     
    },
    {     
      "ques_id": "156",
      "cat_id": "2",     
    },
    {     
      "ques_id": "157",
      "cat_id": "2",     
    }]

print (list1[:len(list1)/2]) #this gives you 1st half
print (list1[len(list1)/2:]) #this gives you second half. 

注意:对于len(list)是奇数的情况。如果len(list)为11,那么前半部分长度为5,后半部分为6

可以根据您的需要应用相同的逻辑。

答案 1 :(得分:0)

假设您要在某些属性上拆分列表,例如cat_id。 我们可以假设您知道总猫ids吗? 说他们是1和2

然后你可以做

list_1 = [x for x in list if x["cat_id"] == 1]
list_2 = [x for x in list if x["cat_id"] == 2]

在更一般的情况下,您不知道cat_id的可能值,您需要先找到所有ID。

ids = [x["cat_id"] for x in list]
ids = list(set(ids))

现在终于列出

lists = [[ x for x in list if x["cat_id"] == y ] for y in ids ]

这将为您提供列表清单。

答案 2 :(得分:0)

为了扩展我的评论,可以使用类似于Python group by

中提供的技术
from collections import defaultdict
data =[...]
tmp = defaultdict(list)
for item in data:
    tmp[item["cat_id"]].append(item)
res = list(tmp.values())