试图创建一个从字典中返回值列表的函数。如果植物每周浇水,它将被追加到列表中,然后返回排序。但是,我的代码迭代“每周”的每个字母,而不是整个字符串,并且我不知道如何访问字典项的浇水频率。如有任何解释,将不胜感激。
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'] 发布于 2016-11-03 19:36:37
修正以前的答案,以便只使用“每周”的值:
>>> 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']发布于 2016-11-03 19:41:27
这一行:
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]发布于 2016-11-03 19:29:29
实现这一点的简化方法是使用dict.keys(),它返回dict中所有键的列表。为了对列表进行排序,可以将sorted()用作:
>>> my_dict = {'fern':'weekly', 'shamrock':'weekly', 'carnation':'weekly'}
>>> sorted(my_dict.keys())
['carnation', 'fern', 'shamrock']编辑:如果有些计划是每月的,首先使用filter或dict理解过滤月度计划。您的代码应该如下所示:
>>> 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']https://stackoverflow.com/questions/40409734
复制相似问题