下面是一个示例字典colors
{
"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。
for key, value in colors.items():
if member_id in value['members']:
return True有没有一种更简单,可能只有一行的方法来做到这一点呢?
发布于 2018-07-03 12:21:42
下面是另一个使用any和generator expression的一行程序
return any(member_id in color['members'] for color in colors.values())发布于 2018-07-03 12:15:21
下面是一种简单的方法:
member_id="273493248051539968"
[k for k, v in colors.items() if member_id in v['members']]输出:
['Blue']发布于 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,但有时列表理解可能不清楚,因为涉及到更多的复杂性。例如,如果您需要两个循环和两个条件,那么列表理解可能不是最佳选择。总体而言,它们是一个非常有用的工具,但何时使用它们由您决定。
https://stackoverflow.com/questions/51146522
复制相似问题