假设我有一些类Info
,它存储用户定义的一堆属性,如:
class Info:
def __init__(self, **kwargs):
for key, value in kwargs.items():
setattr(self, key, value)
def __getitem__(self, key):
return getattr(self, key)
我有一个Info
个实例列表,让我们说:
all_keys = [Info(a=1, b='y', c=0),
Info(a=2, b='y', c=1),
Info(a=3, b='n', c=2),
Info(a=2, b='y', c=3)]
我想根据all_keys
,a
,b
上的某些条件从列表c
中进行选择。我做了以下功能:
def keys_with(all_keys, **kwargs):
out = []
for info in all_keys:
flag = 1
for k, v in kwargs.items():
if info[k] != v:
flag = 0
break
if flag:
out.append(info)
return out
我想做点什么:my_keys = keys_with(all_keys, a=2, b='y')
。给出所需输出的当前函数keys_with
:
[Info(c=1, a=2, b=y), Info(c=3, a=2, b=y)]
函数keys_with()
对于这么简单的东西是丑陋的:它使用标志,嵌套循环,看起来非常非pythonic。我相信有更好的方法可以更紧凑,更蟒蛇地编写它。我感谢任何帮助或提示!
答案 0 :(得分:1)
类似的东西:
"1234-4a20-47c0-b23c-a35a", "53dd-4120-4249-b4f6-ebe2"