尝试创建一个从字典中返回值列表的函数。如果植物每周浇水,它将被附加到列表中,然后返回分类。但是,我的代码会迭代“每周”的每个字母。而不是整个字符串,我不知道如何访问字典项目的浇水频率。任何解释都将不胜感激。
def weekly(plants_d):
d = []
for plant in plants_d:
for plan in plants_d[plant]:
if plan == "weekly":
d.append[plan]
return sort(d)
weekly({'fern':'weekly', 'shamrock':'weekly', 'carnation':'weekly'})
# Should return like this: ['carnation','fern','shamrock']
答案 0 :(得分:2)
修改上一个答案,以便只使用“每周”的值:
>>> my_dict = {'fern':'weekly', 'shamrock':'weekly', 'carnation':'weekly', 'daffodil': 'monthly'}
>>> sorted(k for k, v in my_dict.items() if v == 'weekly')
['carnation', 'fern', 'shamrock']
答案 1 :(得分:1)
这一行:
for plan in plants_d[plant]:
错了。由于plants_d[plant]
是"weekly"
之类的字符串,因此就像
for plan in "weekly":
将迭代字符串中的字母。然后当你执行if plan == "weekly":
时,它永远不会匹配,因为plan
只是一个字母,如"w"
。
您可以简单地使用:
if plants_d[plan] == "weekly":
或者您可以将第一个循环更改为:
for plan_name, plan_frequency in plants_d.items():
if plan_frequency == "weekly":
d.append[plan_name]
答案 2 :(得分:0)
实现此目的的简化方法是使用dict.keys()
返回dict
中所有键的列表。要对列表进行排序,您可以使用sorted()
作为:
>>> my_dict = {'fern':'weekly', 'shamrock':'weekly', 'carnation':'weekly'}
>>> sorted(my_dict.keys())
['carnation', 'fern', 'shamrock']
修改:如果某些计划是按月计算的,请先使用filter
或字典理解过滤月度计划。您的代码应该是:
>>> my_dict = {'fern':'weekly', 'shamrock':'weekly', 'carnation':'weekly',
'something': 'monthly'}
# using filter() as @brianpck has already mentioned 'dict comprehension' approach
# It is better to use brian's approach
>>> filtered_dict = dict(filter(lambda x: x[1] == 'weekly', my_dict.items()))
>>> sorted(filtered_dict.keys())
['carnation', 'fern', 'shamrock']