2015-11-09 40 views
-2
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 

如何正確寫入此代碼? 當我使用元組時,我嘗試了它,但我不知道如何計算時間。返回一個字典,以菜爲關鍵,菜的次數作爲值排序

回答

6
from collections import counter 
from itertools import chain 
Counter(chain(*table_to_foods.values())) 

但林不知道你的老師會接受這個...

2

你要遍歷在提供給您的功能字典的值項,並將其添加到您的計數字典。

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.Counteritertools.chain.from_iterable提供的方法。

0

collections從模塊Counter類的簡單的用法:

>>> 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} 
0
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])) 
相關問題