我將首先為我的代碼提供一些背景關系,而不是進一步解釋,它可以作業但似乎效率很低:
def get_quantities(table_to_foods: Dict[str, List[str]]) -> Dict[str, int]:
"""The table_to_foods dict has table names as keys (e.g., 't1', 't2', and
so on) and each value is a list of foods ordered for that table.
Return a dictionary where each key is a food from table_to_foods and each
value is the quantity of that food that was ordered.
>>> get_quantities({'t1': ['Vegetarian stew', 'Poutine', 'Vegetarian stew'],
't3': ['Steak pie', 'Poutine', 'Vegetarian stew'], 't4': ['Steak pie', 'Steak pie']})
{'Vegetarian stew': 3, 'Poutine': 2, 'Steak pie': 3}
>>> get_quantities({'t1': ['pie'],
't2': ['orange pie'], 't3': ['pie']})
{'pie': 2, 'orange pie': 1}
"""
food_to_quantity = {}
# Accumulate the food information here.
# Creating a dictionary with the new keys as values from the other
for j in table_to_foods.values():
for a in j:
food_to_quantity[a] = 0
# Increment based on number of occurrences
for j in table_to_foods.values():
for a in j:
food_to_quantity[a] = 1
return food_to_quantity
必須有一種更簡單的方法來創建一個新字典,以 table_to_foods 的值作為鍵,并將任何食物值的出現次數作為值。
uj5u.com熱心網友回復:
這是我會怎么做。
table_to_foods = {'t1': ['Vegetarian stew', 'Poutine', 'Vegetarian stew'],
't3': ['Steak pie', 'Poutine', 'Vegetarian stew'], 't4': ['Steak pie', 'Steak pie']}
food_to_quantity = {}
for foods in table_to_foods.values():
for food in foods:
if(food not in food_to_quantity):
food_to_quantity[food]=1
else:
food_to_quantity[food] =1
print(food_to_quantity)
輸出:{'素食燉':3,'Poutine':2,'牛排餡餅':3}
uj5u.com熱心網友回復:
您可以使用collections.Counter和itertools.chain:
from collections import Counter
from itertools import chain
def get_quantities(d):
return dict(Counter(chain.from_iterable(d.values())))
d1 = {'t1': ['Vegetarian stew', 'Poutine', 'Vegetarian stew'], 't3': ['Steak pie', 'Poutine', 'Vegetarian stew'], 't4': ['Steak pie', 'Steak pie']}
d2 = {'t1': ['pie'], 't2': ['orange pie'], 't3': ['pie']}
print(get_quantities(d1)) # {'Vegetarian stew': 3, 'Poutine': 2, 'Steak pie': 3}
print(get_quantities(d2)) # {'pie': 2, 'orange pie': 1}
(dict在大多數用例中,回傳行是多余的。)
如果您不喜歡使用其他模塊,則可以改為:
def get_quantities(d):
output = {}
for lst in d.values():
for x in lst:
output[x] = output.get(x, 0) 1
return output
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/348922.html
上一篇:從字串中查找元音子串
