[英]Order list by key and build sum over list items - python
我想根據 ecxel 文件中的膳食選擇創建購物清單。 我所擁有的是從 csv 導入的列表list_flat_ingredients
[ingredient_amount, ingredient_unit, ingredient_name]
格式如下:
示例內容:
[
[1.0, "0", "Obst nach Wahl für Frühstücksbowl"],
[1.0, "Stück", "Schalotten"],
[1.0, "Stück", "Süßkartoffeln"],
[1.0, "0", "Obst nach Wahl für Frühstücksbowl"],
[500.0, "g", "Spätzle"],
[100.0, "g", "Tunfisch (Dose)"],
[1.0, "Laib", "Brot"],
[250.0, "g", "Spaghetti"],
[1.0, "0", "Spargel, grün"],
[1.0, "Laib", "Brot"],
[4.0, "Stück", "Burger Buns"],
[1.0, "Stück", "Flammkuchenteig"],
[1.0, "Laib", "Brot"],
[1.0, "g", "Berglinsen"],
[4.0, "Stück", "Wiener"],
[1.0, "0", "Obst nach Wahl für Frühstücksbowl"],
[1.0, "g", "Berglinsen"],
[1.0, "Stück", "Baguette"],
[1.0, "Laib", "Brot"],
[150.0, "g", "Garnelen"],
[1.0, "0", "Hirtenkäse "],
[1.0, "Becher", "Joghurt"],
[1.0, "Stück", "Fenchel"],
[1.0, "Kopf", "Salat"],
[1.0, "Becher", "Joghurt"],
[200.0, "g", "Bergkäse"],
[0.25, "Kopf", "Salat"],
[1.0, "0", "Aufstrich nach Wahl für Frühstück"],
[1.0, "0", "Eier"],
[1.0, "0", "Zitrone"],
[1.0, "0", "Aufstrich nach Wahl für Frühstück"],
[1.0, "0", "Ziegencamembert "],
[1.0, "0", "Hummus"],
[1.0, "0", "Aufstrich nach Wahl für Frühstück"],
[1.0, "0", "Paprika"],
[1.0, "0", "Brezen"],
[1.0, "Becher", "Joghurt"],
[1.0, "0", "Paprika"],
[100.0, "g", "Speck"],
[1.0, "0", "Aufstrich nach Wahl für Frühstück"],
[1.0, "0", "Reis nach Wahl"],
[1.0, "0", "Paprika"],
[1.0, "0", "Chiasamen"],
[1.0, "0", "Lachs"],
[1.0, "Stück", "Gurke"],
[1.0, "0", "Chiasamen"],
[2.0, "Stück", "Zwiebeln"],
[2.0, "Stück", "Tomaten"],
[0.0, "0", "0"],
[1.0, "0", "Parmesan"],
[1.0, "0", "Weißwein"],
[0.0, "0", "0"],
[1.0, "0", "Tomaten"],
[1.0, "0", "Zucchini"],
[0.0, "0", "0"],
[1.0, "0", "Gurke"],
[...]
]
然后我要做的是對元素進行分組和求和
for i, g in groupby(sorted(list_flat_ingredients), key=lambda x: x[2]):
shopping_list_in_order.append([sum(v[0] for v in g), i])
問題是我在最終輸出中丟失了元素ingredient_unit
單元(示例):
[
[0.0, "0"],
[0.25, "Salat"],
[0.5, "Gurke"],
[1.0, "Artischocken"],
[4.0, "Aufstrich nach Wahl für Frühstück"],
[1.0, "Brezen"],
[1.0, "Burger Sauce"],
[...],
]
我需要在哪里以及如何在代碼中添加它? 謝謝!
您需要手動進行求和,因為 groupby 生成的group
變量是可迭代的,因此它們只能使用一次。 有關更多詳細信息,請參閱此答案和此答案。
shopping_list_in_order = []
for _, group in groupby(sorted(list_flat_ingredients), key=lambda x: x[2]):
row = []
for elem in group:
if len(row) == 0:
row = elem
else:
row[0] += elem[0]
shopping_list_in_order.append(row)
from pprint import pprint
pprint(shopping_list_in_order)
輸出
[[0.0, '0', '0'],
[0.25, 'Kopf', 'Salat'],
[4.0, '0', 'Aufstrich nach Wahl für Frühstück'],
[1.0, '0', 'Brezen'],
[2.0, '0', 'Chiasamen'],
[1.0, '0', 'Eier'],
[1.0, '0', 'Gurke'],
[1.0, '0', 'Hirtenkäse '],
[1.0, '0', 'Hummus'],
[1.0, '0', 'Lachs'],
[3.0, '0', 'Obst nach Wahl für Frühstücksbowl'],
[3.0, '0', 'Paprika'],
[1.0, '0', 'Parmesan'],
[1.0, '0', 'Reis nach Wahl'],
[1.0, '0', 'Spargel, grün'],
[1.0, '0', 'Tomaten'],
[1.0, '0', 'Weißwein'],
[1.0, '0', 'Ziegencamembert '],
[1.0, '0', 'Zitrone'],
[1.0, '0', 'Zucchini'],
[3.0, 'Becher', 'Joghurt'],
[1.0, 'Kopf', 'Salat'],
[4.0, 'Laib', 'Brot'],
[1.0, 'Stück', 'Baguette'],
[1.0, 'Stück', 'Fenchel'],
[1.0, 'Stück', 'Flammkuchenteig'],
[1.0, 'Stück', 'Gurke'],
[1.0, 'Stück', 'Schalotten'],
[1.0, 'Stück', 'Süßkartoffeln'],
[2.0, 'g', 'Berglinsen'],
[2.0, 'Stück', 'Tomaten'],
[2.0, 'Stück', 'Zwiebeln'],
[4.0, 'Stück', 'Burger Buns'],
[4.0, 'Stück', 'Wiener'],
[100.0, 'g', 'Speck'],
[100.0, 'g', 'Tunfisch (Dose)'],
[150.0, 'g', 'Garnelen'],
[200.0, 'g', 'Bergkäse'],
[250.0, 'g', 'Spaghetti'],
[500.0, 'g', 'Spätzle']]
我的解決方案是基於 dict using。
list_flat_ingredients = [
[1.0, "0", "Obst nach Wahl für Frühstücksbowl"],
[1.0, "Stück", "Schalotten"],
[1.0, "Stück", "Süßkartoffeln"],
[1.0, "0", "Obst nach Wahl für Frühstücksbowl"],
[500.0, "g", "Spätzle"],
[100.0, "g", "Tunfisch (Dose)"],
[1.0, "Laib", "Brot"],
[250.0, "g", "Spaghetti"],
[1.0, "0", "Spargel, grün"],
[1.0, "Laib", "Brot"],
[4.0, "Stück", "Burger Buns"],
[1.0, "Stück", "Flammkuchenteig"],
[1.0, "Laib", "Brot"],
[1.0, "g", "Berglinsen"],
[4.0, "Stück", "Wiener"],
[1.0, "0", "Obst nach Wahl für Frühstücksbowl"],
[1.0, "g", "Berglinsen"],
[1.0, "Stück", "Baguette"],
[1.0, "Laib", "Brot"],
[150.0, "g", "Garnelen"],
[1.0, "0", "Hirtenkäse "],
[1.0, "Becher", "Joghurt"],
[1.0, "Stück", "Fenchel"],
[1.0, "Kopf", "Salat"],
[1.0, "Becher", "Joghurt"],
[200.0, "g", "Bergkäse"],
[0.25, "Kopf", "Salat"],
[1.0, "0", "Aufstrich nach Wahl für Frühstück"],
[1.0, "0", "Eier"],
[1.0, "0", "Zitrone"],
[1.0, "0", "Aufstrich nach Wahl für Frühstück"],
[1.0, "0", "Ziegencamembert "],
[1.0, "0", "Hummus"],
[1.0, "0", "Aufstrich nach Wahl für Frühstück"],
[1.0, "0", "Paprika"],
[1.0, "0", "Brezen"],
[1.0, "Becher", "Joghurt"],
[1.0, "0", "Paprika"],
[100.0, "g", "Speck"],
[1.0, "0", "Aufstrich nach Wahl für Frühstück"],
[1.0, "0", "Reis nach Wahl"],
[1.0, "0", "Paprika"],
[1.0, "0", "Chiasamen"],
[1.0, "0", "Lachs"],
[1.0, "Stück", "Gurke"],
[1.0, "0", "Chiasamen"],
[2.0, "Stück", "Zwiebeln"],
[2.0, "Stück", "Tomaten"],
[0.0, "0", "0"],
[1.0, "0", "Parmesan"],
[1.0, "0", "Weißwein"],
[0.0, "0", "0"],
[1.0, "0", "Tomaten"],
[1.0, "0", "Zucchini"],
[0.0, "0", "0"],
[1.0, "0", "Gurke"],
]
result_dict = {}
result_list = []
for item in list_flat_ingredients:
if item[2] not in result_dict:
result_dict[item[2]] = [item[0], item[1]]
else:
result_dict[item[2]][0] += item[0]
# if you need result as list
for item in result_dict.keys():
result_dict[item].append(item)
result_list.append(result_dict[item])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.