比较和返回字典字符串值?

时间:2016-11-03 19:28:04

标签: python python-3.x dictionary

尝试创建一个从字典中返回值列表的函数。如果植物每周浇水,它将被附加到列表中,然后返回分类。但是,我的代码会迭代“每周”的每个字母。而不是整个字符串,我不知道如何访问字典项目的浇水频率。任何解释都将不胜感激。

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'] 

3 个答案:

答案 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]

请参阅Iterating over dictionaries using 'for' loops

答案 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']