根据通用对象属性的值从对象列表中选择项目

时间:2017-05-24 21:33:32

标签: python

背景

假设我有一些类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_keysab上的某些条件从列表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。我相信有更好的方法可以更紧凑,更蟒蛇地编写它。我感谢任何帮助或提示!

1 个答案:

答案 0 :(得分:1)

类似的东西:

"1234-4a20-47c0-b23c-a35a", "53dd-4120-4249-b4f6-ebe2"