Return 以菜品为键,菜品被点的次数为值的字典
Return a dictionary with the dish as the key, and the number of times that dish was ordered as the value
def get_quantities(table_to_foods):
""" (dict of {str: list of str}) -> dict of {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}
"""
food_to_quantity = {}
# Accumulate the food information here.
# I have no idea what it should be at here.
return food_to_quantity
如何正确编写这段代码?
当我用元组的时候,我试了一下,但我不知道如何计算次数。
from collections import counter
from itertools import chain
Counter(chain(*table_to_foods.values()))
但我不确定你的老师会接受这个...
您需要遍历提供给函数的字典值中的项目,并将它们添加到计数字典中。
def get_quantities(table_to_foods):
food_to_quantity = {}
for table_order in table_to_foods.itervalues():
for menu_item in table_order:
if menu_item in food_to_quantity:
food_to_quantity[menu_item] += 1
else:
food_to_quantity[menu_item] = 1
return food_to_quantity
如果您可以使用除基本知识以外的其他方法,我会使用 Joran 提供的方法以及 collections.Counter
和 itertools.chain.from_iterable
。
collections
模块 Counter
class 的简单用法:
>>> def get_quantities(table_to_foods):
c = Counter()
for li in table_to_foods.values():
c.update(li)
return dict(c)
>>> get_quantities(l1)
{'Steak pie': 3, 'Poutine': 2, 'Vegetarian stew': 3}
import collections
orders = {'t1': ['Vegetarian stew', 'Poutine', 'Vegetarian stew'],
't3': ['Steak pie', 'Poutine', 'Vegetarian stew'],
't4': ['Steak pie', 'Steak pie']}
# We're not interested in the table numbers so can initially just produce
# a flat list.
flatorders = []
for o in orders:
flatorders += orders[o]
quantities = collections.Counter(flatorders)
# The "sorted" keyword prints the list in alphabeitcal order. If it is
# omitted the list is printed in order of quantities.
for k in sorted(quantities):
print("{:15} {:3d}".format(k, quantities[k]))
def get_quantities(table_to_foods):
""" (dict of {str: list of str}) -> dict of {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}
"""
food_to_quantity = {}
# Accumulate the food information here.
# I have no idea what it should be at here.
return food_to_quantity
如何正确编写这段代码? 当我用元组的时候,我试了一下,但我不知道如何计算次数。
from collections import counter
from itertools import chain
Counter(chain(*table_to_foods.values()))
但我不确定你的老师会接受这个...
您需要遍历提供给函数的字典值中的项目,并将它们添加到计数字典中。
def get_quantities(table_to_foods):
food_to_quantity = {}
for table_order in table_to_foods.itervalues():
for menu_item in table_order:
if menu_item in food_to_quantity:
food_to_quantity[menu_item] += 1
else:
food_to_quantity[menu_item] = 1
return food_to_quantity
如果您可以使用除基本知识以外的其他方法,我会使用 Joran 提供的方法以及 collections.Counter
和 itertools.chain.from_iterable
。
collections
模块 Counter
class 的简单用法:
>>> def get_quantities(table_to_foods):
c = Counter()
for li in table_to_foods.values():
c.update(li)
return dict(c)
>>> get_quantities(l1)
{'Steak pie': 3, 'Poutine': 2, 'Vegetarian stew': 3}
import collections
orders = {'t1': ['Vegetarian stew', 'Poutine', 'Vegetarian stew'],
't3': ['Steak pie', 'Poutine', 'Vegetarian stew'],
't4': ['Steak pie', 'Steak pie']}
# We're not interested in the table numbers so can initially just produce
# a flat list.
flatorders = []
for o in orders:
flatorders += orders[o]
quantities = collections.Counter(flatorders)
# The "sorted" keyword prints the list in alphabeitcal order. If it is
# omitted the list is printed in order of quantities.
for k in sorted(quantities):
print("{:15} {:3d}".format(k, quantities[k]))