【问题标题】:how to get list of items in a class based on their attribute value [closed]如何根据属性值获取类中的项目列表[关闭]
【发布时间】:2020-10-01 15:21:42
【问题描述】:
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

我有一个测试类,我在其中基于列表创建值。

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

如下:

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

返回

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

或项目值大于 3:

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

返回

['f', 'e', 'd']

【问题讨论】:

  • 你尝试过什么,它到底有什么问题?

标签: python list class sorting attributes


【解决方案1】:

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

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

这将返回['d', 'e', 'f']。然后,您可以根据需要对该列表进行排序!反转它应该可以工作,在反转它之前对其进行排序也是如此。

Here's a good resource about list comprehension.

【讨论】:

    【解决方案2】:
    print(sorted([k for k, v in class_items.items() if v.value > 3], reverse=True))
    # ['f', 'e', 'd']
    

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

    另外:不要将您的list 命名为list。它会影响内置的list

    【讨论】:

    • 所以,接下来是'v.value > 3'。
    • @quamrana 我的错,已修复。
    • 好的,更好。现在值得一票。
    【解决方案3】:

    试试这个:

    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']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-03
      • 2021-05-10
      • 1970-01-01
      • 2013-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多