首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >比较并返回字典字符串值?

比较并返回字典字符串值?
EN

Stack Overflow用户
提问于 2016-11-03 19:28:04
回答 3查看 103关注 0票数 1

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

代码语言:javascript
运行
复制
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'] 
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-11-03 19:36:37

修正以前的答案,以便只使用“每周”的值:

代码语言:javascript
运行
复制
>>> 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']
票数 2
EN

Stack Overflow用户

发布于 2016-11-03 19:41:27

这一行:

代码语言:javascript
运行
复制
for plan in plants_d[plant]:

是错的。因为plants_d[plant]是一个类似于"weekly"的字符串,所以如下所示

代码语言:javascript
运行
复制
for plan in "weekly":

它将遍历字符串中的字母。那么,当您执行if plan == "weekly":时,它永远不会匹配,因为plan只是一个字母,就像"w"一样。

您可以简单地使用:

代码语言:javascript
运行
复制
if plants_d[plan] == "weekly":

也可以将第一个循环更改为:

代码语言:javascript
运行
复制
for plan_name, plan_frequency in plants_d.items():
    if plan_frequency == "weekly":
        d.append[plan_name]

请参阅Iterating over dictionaries using 'for' loops

票数 1
EN

Stack Overflow用户

发布于 2016-11-03 19:29:29

实现这一点的简化方法是使用dict.keys(),它返回dict中所有键的列表。为了对列表进行排序,可以将sorted()用作:

代码语言:javascript
运行
复制
>>> my_dict = {'fern':'weekly', 'shamrock':'weekly', 'carnation':'weekly'}
>>> sorted(my_dict.keys())
['carnation', 'fern', 'shamrock']

编辑:如果有些计划是每月的,首先使用filter或dict理解过滤月度计划。您的代码应该如下所示:

代码语言:javascript
运行
复制
>>> 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']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40409734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档