1

StackOverflow で関連する質問が見つからなかったので...

次の形式の惑星と星に関するデータで満たされた辞書があります。

dict = {'name': value, 'mass' : value, 'radius': value, etc..}

このディクショナリのキーには、値を割り当てる Planet および Star クラスのプロパティと同じ名前が付けられています。

私がやりたいことは、他の入力されたフィールドに基づいてデータの特定の欠落フィールドを計算した後、入力されたすべての星と惑星のオブジェクトの欠落情報の量を数えることです...

このディクショナリのキーをステップスルーし、キーが保持する文字列で Star/Planet オブジェクトのプロパティを参照する方法はありますか?

次のようなものです:

for planetObjs in planets:
    for key in dict.iterkeys():
        if planetObj.key == None:
            countMissingDict[key] += 1  

Planet オブジェクト内の属性として使用される文字列と同じ文字列である、キーが保持する文字列をどのように参照すればよいでしょうか? これは可能ですか?

4

2 に答える 2

3

使用getattr:

getattr(object, name[, default]) -> value

オブジェクトから名前付き属性を取得します。getattr(x, 'y')と同等 x.yです。デフォルトの引数が与えられると、属性が存在しない場合に返されます。それがないと、その場合は例外が発生します

コードを次のように短縮できます。

from collections import Counter
countMissingDict = Counter(key for planetObjs in planets for key in dic
                                         if getattr(planetObjs, key) is None)

注:dictを変数名として使用しないでください。

于 2013-10-18T21:04:52.793 に答える
0

を使用しますgetattr

for planetObj in planets:
    for key in dict.iterkeys():
        if getattr(planetObj, key) == None:
            countMissingDict[key] += 1  
于 2013-10-18T21:06:35.157 に答える