如何根据属性值获取 class 中的项目列表

how to get list of items in a class based on their attribute value

class test:
    def __init__(self, test):
        self.name = test

m=1
class_items = {}
list = ['a', 'b', 'c', 'd', 'e', 'f']

for i in list:
    class_items[i] = test(i)
    class_items[i].value = m    
    m = m+1

class_items['e'].value
Out[2]: 5

class_items['a'].value
Out[3]: 1

我有一个测试 class,我在其中根据列表创建值。

我想获取列表中值大于 3 的列表项?或者列表项的排序列表...

如下所示:

sorted(class_items[*].value) <<< NEED THE RIGHT FUNCTION HERE

到return

['f', 'e', 'd', 'c', 'b', 'a']

或项目值超过 3:

sorted(class_items[*].value>3)  <<< NEED THE RIGHT FUNCTION HERE

到return

['f', 'e', 'd']
print(sorted([k for k, v in class_items.items() if v.value > 3], reverse=True))
# ['f', 'e', 'd']

您需要使用 value 大于 3 的元素创建一个新的 list,并将 reverse 标志设置为 True

另外:不要将您的 list 命名为 list。它隐藏了内置 list.

您可以使用列表理解来构建它。此外,您不应该将列表命名为 list,因为它会覆盖内置名称,因此在此示例中我将您的 list 重命名为 known。它包含完全相同的值 ['a', 'b', 'c', 'd', 'e', 'f'],我只是想给它起一个更好的名字。

values = [i for i in known if class_items[i].value > 3]

这个returns['d', 'e', 'f']。然后您可以按照您认为合适的方式对这个列表进行排序!反转它应该有效,就像在反转它之前对其进行排序一样。

Here's a good resource about list comprehension.

试试这个:

class_items_sorted = sorted([key for key, val in class_items.items()], reverse=True)

class_items_filtered = sorted([key for key, val in class_items.items() if val.value>3], reverse=True)

print(class_items_sorted)

print(class_items_filtered)

输出:

['f', 'e', 'd', 'c', 'b', 'a']
['f', 'e', 'd']