查找多个列表中是否存在值并获取其名称

时间:2017-03-30 12:29:43

标签: python python-2.7

我发现了类似的问题,但我无法转换答案以满足我的需求。 (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_WOHTELrep_REPDAY。上面的代码仅打印出来。

如何更改脚本的这一部分,打印我想要的所有内容?

2 个答案:

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

有关已使用功能的更多信息: