我有一个 Python 对象,它有很多属性(比如 20 个)。我想将其中大约一半放在一个元组中。我会写:
# Sample property names
myTuple = (myObj['one'], myObj['five'], myObj['six'],
myObj['seven'], myObj['nine'], myObj['ten'],
myObj['eleven'], myObj['fifteen'], myObj['twenty'])
问题是,我必须多次重复源对象的名称。有更简洁的语法吗?我会喜欢类似这样的东西:
# Sample property names
myTuple = myObj[('one', 'five', 'six', 'seven', 'nine',
'ten', 'eleven', 'fifteen', 'twenty')]
请您参考如下方法:
您可以使用 operator从对象或字典中提取元素的模块。对于对象使用 attrgetter , 对于 dict 使用 itemgetter .它返回一个函数,因此您仍然必须调用它返回的函数,传递您需要从中提取值的对象。
from operator import attrgetter, itemgetter
class X:
def __init__(self, one, two, three):
self.one = one
self.two = two
self.three = three
# for object
x = X(1,2,3)
print(attrgetter('one', 'two')(x))
# for dict
y = {'one': 1, 'two':2, 'three': 3}
print(itemgetter('one', 'two')(y))
它返回一个函数的好处是您可以存储该函数并在任意数量的对象上多次调用它。
如果你想保留 getter 函数,那么只需将它分配给一个变量
例如
fn = itemgetter('one', 'two')
fn(y)
# invoke on other dict(s) here
