首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种更有Pythonic风格的方法来遍历字典中的键来查找比这个更好的值呢?

有没有一种更有Pythonic风格的方法来遍历字典中的键来查找比这个更好的值呢?
EN

Stack Overflow用户
提问于 2018-07-03 12:07:19
回答 4查看 232关注 0票数 3

下面是一个示例字典colors

代码语言:javascript
复制
{
    "Red" : {
        "members" : {
            "153950039532134112" : {
                "rank" : 1,
                "score" : 43,
                "time" : 1530513303
            }
        },
        "rank" : 2,
        "score" : 43
    },
    "Blue" : {
        "members" : {
            "273493248051539968" : {
                "rank" : 1,
                "score" : 849,
                "time" : 1530514923
            },
            "277645262486011904" : {
                "rank" : 2,
                "score" : 312,
                "time" : 1530513964
            },
            "281784064714487810" : {
                "rank" : 3,
                "score" : 235,
                "time" : 1530514147
            }
        },
        "rank" : 1,
        "score" : 1396
    }
}

对于这个例子,让我们假设在这个字典中有更多的颜色命名的键。现在,假设我正在寻找一个特定的成员ID。

代码语言:javascript
复制
for key, value in colors.items():
    if member_id in value['members']:
        return True

有没有一种更简单,可能只有一行的方法来做到这一点呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-07-03 12:21:42

下面是另一个使用anygenerator expression的一行程序

代码语言:javascript
复制
return any(member_id in color['members'] for color in colors.values())
票数 7
EN

Stack Overflow用户

发布于 2018-07-03 12:15:21

下面是一种简单的方法:

代码语言:javascript
复制
member_id="273493248051539968"

[k for k, v in colors.items() if member_id in v['members']]

输出:

代码语言:javascript
复制
['Blue']
票数 1
EN

Stack Overflow用户

发布于 2018-07-03 12:29:26

您可以使用list comprehension,这是执行for循环和条件语句的一种简明方式。

member_id存在时,下面的列表理解将返回颜色值。如果您检查返回的列表至少有一个值,您就知道member_id出现在至少一个颜色字典中。如果您创建两行并指定输出,您还可以将颜色字典放在手边,以防您需要修改或读取它的任何状态。

any([color for color in colorDict if member_id in colorDict[color]['members']])

我想说,这比你问题中的例子更像pythonic,但有时列表理解可能不清楚,因为涉及到更多的复杂性。例如,如果您需要两个循环和两个条件,那么列表理解可能不是最佳选择。总体而言,它们是一个非常有用的工具,但何时使用它们由您决定。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51146522

复制
相关文章

相似问题

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