如何获取字典列表并根据键值将其拆分

时间:2020-06-11 07:17:02

标签: python

正如标题所述,我想知道如何采用以下代码并将它们分成单独的列表。

x = [{'class': 'm', 'radius': 2}, {'class': 'b', 'radius': 5}, {'class': 'm', 'radius': 22}]

我想要这样的结果

m = [{'class': 'm', 'radius': 2}, {'class': 'm', 'radius': 22}]
b = [{'class': 'b', 'radius': 5}]

我想使用一个for循环,但是我不确定如何获取整个字典,而不仅仅是字典的特定键。 谢谢!

4 个答案:

答案 0 :(得分:4)

您可以使用itertools.groupby来完成此操作。但是,您需要首先按类别对字典列表进行排序。

import operator
import itertools

x.sort(key=operator.itemgetter('class'))
groups = itertools.groupby(x, key=operator.itemgetter('class'))

collected = dict((cls, list(items)) for cls, items in groups)

根据您的用例,可能不需要collected行。 groupby返回已分组项目的一次性迭代器,因此这里我们将其转换为list,以便您可以打印它们并对其进行多次遍历而不会造成行为混乱。

答案 1 :(得分:2)

m, b = [], []
for d in x:
  if d['class'] == 'm':
    m.append(d)
  else:
    b.append(d)

答案 2 :(得分:1)

您可以使用列表理解:

m = [dict for dict in x if dict['class'] == 'm']
b = [dict for dict in x if dict['class'] == 'b']

答案 3 :(得分:1)

这将是一种通用方法,它将采用所有唯一的类并创建列表列表。

class_list=set([a['class'] for a in x])
new_list=[]
for clas in class_list:
    sub_list=[]
    for val in x:
        if val['class']==clas:
            sub_list.append(val)
    new_list.append(sub_list)
print(new_list)

您将得到这样的输出。

[[{'class': 'b', 'radius': 5}],
 [{'class': 'm', 'radius': 2}, {'class': 'm', 'radius': 22}]]