[英]How can I append other data in a list of dictionaries based on matching key values using Python
[英]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.