我有这些数据:
inventory = { HAMMER: (10,100),
SCREW: (1, 1000),
NAIL: (1, 1000),
SCREWDRIVER: (8, 100),
DRILL: (50, 20),
WORKBENCH: (150, 5),
HANDSAW: (15, 50),
CHAINSAW: (80, 30)
}
我写了以下这个函数:
def get_items(cheapness):
""" Return a list of (item, (price, count)) tuples that are the given
cheapness. Note that the second element of the tuple is another tuple. """
if cheapness == 'CHEAP':
return [(key, value) for (key,value) in inventory.items() if value in ((cost,quantity) for (cost, quantity) in inventory.values() if cost < 20)]
elif cheapness == 'MODERATE':
return [(key, value) for (key,value) in inventory.items() if value in ((cost,quantity) for (cost, quantity) in inventory.values() if 20 < cost < 100)]
elif cheapness == 'EXPENSIVE':
return [(key, value) for (key,value) in inventory.items() if value in ((cost,quantity) for (cost, quantity) in inventory.values() if cost > 100)]
我的问题是,当我执行print type(get_items(CHEAP))
时,我得到<type 'NoneType'>
。如何将结果作为列表返回?
答案 0 :(得分:5)
此代码功能更强大,可能更易于维护:
def get_items(cheapness):
def a(value):
if cheapness == 'CHEAP':
return value < 20
if cheapness == 'MODERATE':
return value >= 20 and value < 100
if cheapness == 'EXPENSIVE':
return value >= 100
return False
return filter(lambda x: a(x[1][0]), inventory.items())
答案 1 :(得分:3)
说出你的意思:
def get_items(cheapness):
""" Return a list of (item, (price, count)) tuples that are the given
cheapness. Note that the second element of the tuple is another tuple. """
if cheapness == 'CHEAP':
return [(item, (price,count)) for (item, (price,count)) in inventory.items() if price < 20]
elif cheapness == 'MODERATE':
return [(item, (price,count)) for (item, (price,count)) in inventory.items() if price > 20 and price < 100]
elif cheapness == 'EXPENSIVE':
return [(item, (price,count)) for (item, (price,count)) in inventory.items() if price > 100]
答案 2 :(得分:1)
打印类型怎么样(get_items('CHEAP'))? (注意引号)