簡體   English   中英

我如何獲取字典列表並根據鍵值將它們拆分

[英]How can I take a list of dictionaries and split them up based on key values

正如標題所說,我想知道如何使用以下代碼並將它們分成單獨的列表。

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 循環,但我不確定如何獲取整個字典,而不僅僅是字典的特定鍵。 謝謝!

您可以使用itertools.groupby以優雅的方式執行此操作。 但是,您需要先按 class 對字典列表進行排序。

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 ,以便您可以打印它們並多次迭代它們而不會造成混淆行為。

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

您可以使用列表理解:

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

這將是一種通用方法,它將采用所有獨特的類並創建一個列表列表。

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)

你會得到一個這樣的 output。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM