1

我在 StackOverflow 中找不到相关问题,所以...

我有一本字典,里面有关于行星和恒星的数据,格式如下:

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

这本字典的键与我为其分配值的 Planet 和 Star 类的属性具有相同的名称。

在我根据其他填充字段计算某些缺失的数据字段之后,我想做的是计算所有填充的 Star 和 Planet 对象的缺失信息量......

有没有什么办法可以单步遍历这个字典的键,并用键持有的字符串引用 Star/Planet 对象的属性?

所以像:

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

我将如何引用 key 保存的字符串,该字符串与 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 回答