![](/img/trans.png)
[英]How to efficiently insert key-value from one list of dictionaries to another based on a common key-value pair in Python?
[英]how to create a list of values from one key-value pair based on the value of another k-v pair from a list of dictionaries with two key-value pairs
我試圖遍歷字典列表,目的是根據另一個k,v對的值生成一個k,v對的值列表。 每個詞典包含兩個k,v對,其各自的鍵相同。
例如,給出以下列表:
dict_list =[{'basket': 1, 'fruit': 'apple'},
{'basket': 1, 'fruit': 'orange'},
{'basket': 1, 'fruit': 'peach'},
{'basket': 2, 'fruit': 'kiwi'},
{'basket': 2, 'fruit': 'lemon'},
{'basket': 3, 'fruit': 'grape'}]
我想產生這個清單:
list_list = [['apple','orange','peach'],
['kiwi','lemon'],
['grape']]
我在遍歷迭代以實現隔離列表方面遇到困難。 到目前為止,我只能一起獲得所有水果值的列表。 感謝您的任何建議。
您可以從itertools使用groupby。
import itertools
list_list = [[f['fruit'] for f in v] for k, v in itertools.groupby(dict_list, key=lambda x: x['basket'])]
假定dict_list
中的購物籃條目已排序(或相同的購物籃在列表中彼此相鄰)。 如果不是這種情況,請在groupby
之前排序。
這是不使用groupby
一種方法:
from collections import defaultdict
dict_list = [
{'basket': 1, 'fruit': 'apple'},
{'basket': 1, 'fruit': 'orange'},
{'basket': 1, 'fruit': 'peach'},
{'basket': 2, 'fruit': 'kiwi'},
{'basket': 2, 'fruit': 'lemon'},
{'basket': 3, 'fruit': 'grape'},
]
def to_list(dlist):
full_d = defaultdict(list)
for d in dlist:
basket = d['basket']
fruit = d['fruit']
full_d[basket].append(fruit)
return list(full_d.values())
print(to_list(dict_list))
輸出:
[['apple', 'orange', 'peach'], ['kiwi', 'lemon'], ['grape']]
或簡化一些:
def to_list(dlist):
full_d = defaultdict(list)
for d in dlist:
full_d[d['basket']].append(d['fruit'])
return list(full_d.values())
我知道這並不是您要問的,但也許您應該重新考慮構造事情的方式。 考慮一下是否有一個可以維護購物籃狀態並返回其值的類,如下所示:
class Basket:
def __init__(self):
self.basket = []
def add_item(self, item):
self.basket.append(item)
def get_basket_items(self):
return self.basket
這是將上述類實現到工作流中的方式:
baskets = {}
baskets.update({1: Basket()})
baskets.update({2: Basket()})
baskets[1].add_item("orange")
baskets[1].add_item("apple")
baskets[2].add_item("kiwi")
all_items =[]
for basket in baskets.values():
all_items.append(basket.get_basket_items())
print(all_items)
當您想開始對數據結構中的元素做一些時髦的事情時,類真的很有用。 在這方面,它們更具靈活性。 希望有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.