正如标题所述,我想知道如何采用以下代码并将它们分成单独的列表。
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循环,但是我不确定如何获取整个字典,而不仅仅是字典的特定键。 谢谢!
答案 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}]]