gpt4 book ai didi

python - 如何根据列表中类的属性使 Python 中的列表不同?

转载 作者:太空狗 更新时间:2023-10-29 21:17:33 24 4
gpt4 key购买 nike

我有一个来自同一类的实例列表,我想根据类中的属性使我的列表不同。实现这一目标的最 pythonic 方法是什么?

下面是一些示例代码:

#!/usr/bin/python
#-*- coding:utf-8 -*-

class MyClass(object):
def __init__(self, classId, tag):
self.classId = classId
self.tag = tag

myList = []

myInstance1 = MyClass(1, "ABC")
myInstance2 = MyClass(2, "DEF")
myInstance3 = MyClass(3, "DEF")

myList.append(myInstance1)
myList.append(myInstance3) # note that the order is changed deliberately
myList.append(myInstance2)

如果我现在想根据 MyClass 中的一个属性对我的列表进行排序,我通常只是按键排序,然后使用 lambda 表达式设置键 - 如下所示:

myList.sort(key=lambda x: x.classId)
for x in myList:
print x.classId

$ python ./test.py
1
2
3

是否可以使用类似的方法(lambda、map 或类似方法)根据“标签”属性使列表不同?此外,如果这可能的话,它是否是根据列表中类的属性使列表不同的最“pythonic”方式?

我已经尝试在 SO 和 Google 上搜索有关此事的主题,但我发现的所有结果都涉及仅包含数值而不包含自定义对象的简单列表。

最佳答案

您可以使用 python dict comprehension

{x.tag: x for x in myList}.values()

以你的例子为例:

>>> class MyClass(object):
... def __init__(self, classId, tag):
... self.classId = classId
... self.tag = tag
...
>>> myList = [MyClass(1, "ABC"), MyClass(2, "DEF"), MyClass(3, "DEF")]
>>> uniqList = {x.tag: x for x in myList}.values()
>>> print [x.classId for x in uniqList]
[1, 3]

关于python - 如何根据列表中类的属性使 Python 中的列表不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16898977/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com