9

同じクラスのインスタンスのリストがあり、クラスのプロパティに基づいてリストを区別したいと考えています。これを達成するための最も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 のプロパティの 1 つに基づいてリストを並べ替えたい場合は、通常、キーで並べ替え、ラムダ式を使用してキーを設定します。次のようにします。

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

$ python ./test.py
1
2
3

同様の方法 (ラムダ、マップなど) を使用して、「タグ」プロパティに基づいてリストを区別することは可能ですか? また、これが可能であれば、そのリスト内のクラスのプロパティに基づいてリストを区別する最も「pythonic」な方法ですか?

SO と Google の両方でこの問題に関するトピックを検索してみましたが、見つかったすべての結果は、カスタム オブジェクトではなく数値のみを含む単純なリストを扱っていました。

4

2 に答える 2

6

キーをオンにしたいプロパティが不変であると仮定すると、辞書を使用できます。

d = {}
for x in xs:
    d[x.tag] = x

値ごとに 1dつの値が含まれるようになりました。またはを使用して にアクセスできます。xtagd.values()d.itervalues()xs

注意。ここでは、最後に一致したアイテムが勝ちます。最初に勝つには、逆に繰り返します。

于 2013-06-03T14:26:06.870 に答える