我发现了类似的问题,但我无法转换答案以满足我的需求。 (Find if value exists in multiple lists)
所以,基本上,我有多个列表,我想列出所有这些列表,其中包含当前用户的用户名。
$data = Districts::distinct()->whereRaw('LOWER(district) like ?', [strtolower('%'.$district . '%')])->orWhereRaw('LOWER(region) like ?', [strtolower('%'.$district . '%')])->select('region', 'district')->get();
如果当前用户是user1,我希望它能够打印import getpass
value = getpass.getuser()
rep_WOHTEL = ['user1','user2','user3']
rep_REPDAY = ['user4','user1','user3']
rep_ZARKGL = ['user3','user1','user2']
rep_WOHOPL = ['user3','user2','user5']
#No idea how code below works
w = next(n for n,v in filter(lambda t: isinstance(t[1],list) and t[0].startswith('rep_'), globals().items()) if value in v)
print(w)
,rep_WOHTEL
和rep_REPDAY
。上面的代码仅打印出来。
如何更改脚本的这一部分,打印我想要的所有内容?
答案 0 :(得分:1)
就像我在链接问题中发表评论一样,遍历所有globals()
或locals()
是一个坏主意。将您的列表存储在一个字典或列表中,然后迭代它。
value = "user1"
named_lists = {
"WOHTEL": ['user1','user2','user3'],
"REPDAY": ['user4','user1','user3'],
"ZARKGL": ['user3','user1','user2'],
"WOHOPL": ['user3','user2','user5']
}
names = [name for name, seq in named_lists.items() if value in seq]
print(names)
结果:
['REPDAY', 'ZARKGL', 'WOHTEL']
答案 1 :(得分:0)
检查值是否在所有全局列表中,如果为true,则打印哪些列表包含所需值。
<强>代码:强>
rep_WOHTEL = ['user1','user2','user3']
rep_REPDAY = ['user4','user1','user3']
rep_ZARKGL = ['user3','user1','user2']
rep_WOHOPL = ['user3','user2','user5']
value = 'user1'
x = globals().items()
for n,v in filter(lambda t: isinstance(t[1],list) and t[0].startswith('rep_'), x):
if value in v:
print(n)
<强>输出:强>
rep_REPDAY
rep_ZARKGL
rep_WOHTEL
有关已使用功能的更多信息: