簡體   English   中英

按鍵排序列表並在列表項上構建總和 - python

[英]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.

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