(Python)基于属性将字典一分为二

(Python)基于属性将字典一分为二,python,dictionary,Python,Dictionary,我想根据主字典中的属性中是否存在字符串数组,将字典一分为二。目前,我可以通过两个单独的词典理解(见下文)来实现这一点,但有没有更有效的方法只通过一行/词典理解来实现这一点 included = {k:v for k,v in users.items() if not any(x.lower() in v["name"].lower() for x in EXCLUDED_USERS)} excluded = {k:v for k,v in users.items() if any(x.lower

我想根据主字典中的属性中是否存在字符串数组,将字典一分为二。目前,我可以通过两个单独的词典理解(见下文)来实现这一点,但有没有更有效的方法只通过一行/词典理解来实现这一点

included = {k:v for k,v in users.items() if not any(x.lower() in v["name"].lower() for x in EXCLUDED_USERS)}
excluded = {k:v for k,v in users.items() if any(x.lower() in v["name"].lower() for x in EXCLUDED_USERS)}
编辑


排除的用户
包含模式列表

此解决方案更详细,但它应该更有效,并且可能更可读:

included = {}
excluded = {}

lower_excluded_users = [x.lower() for x in EXCLUDED_USERS]

for k,v in users.items():
    if any(x in v["name"].lower() for x in lower_excluded_users):
        excluded[k] = v
    else:
        included[k] = v
我不认为只有一种理解就可以做到。可以在
k:v
语句中使用,也不可能在
if
之后在
{k:v代表k,v代表users.items()如果k…}
模式中使用
else

或不美化的:

[excluded.update({aKey: users[aKey]}) if any(x in users[aKey]["name"].lower() for x in lower_excluded_users) else included.update({aKey: users[aKey]}) for aKey in users.keys()]

为什么不创建一个包含2个元素的数组/dict,并根据条件将元素导入正确的位置?@LaurIvan你是说一个字典,有两个键,一个用于包含,一个用于排除?排除的用户中有什么?完整的用户名或用户名模式?排除的用户是一个模式列表我已经发布了一个可能的单行解决方案是的,我已经考虑过了,但我试图通过一个字典理解来实现它。你只将列表理解用作for循环,而不考虑理解的结果。它的可读性较差,对IMHO没有任何好处。注意:我没有否决。@EricDuminil-实际上,在list/dict理解块中调用函数会稍微快一点(这不是速度或可读性的问题,OP需要一行代码。这就是我给出的。每个人都知道Python是一种可爱的语言。他是对的,我说的是一行代码,这就实现了。)that@Sinfieldd::嗯……她?
[excluded.update({aKey: users[aKey]}) if any(x in users[aKey]["name"].lower() for x in lower_excluded_users) else included.update({aKey: users[aKey]}) for aKey in users.keys()]