[英]Get the object name of a specific object from namedtuple
我最近发现了namedtuple
并想用它来代替我讨厌的大型类定义,但是我很好奇是否有一种聪明的方法来检索我刚刚选择的值的对象名称,如果不清楚,请看下面的例子;
MyStruct = namedtuple("MyStruct","Var1 Var2 Var3")
Instance = MyStruct(1,2,3)
# What I currently do (but hopefully there is a smarter way to do this)
print "Var1:\t"+str(Instance.Var1)+"Var2:\t"+str(Instance.Var2) #and so forth
我知道有_fields
选项看起来像这样:
for x in Instance._fields:
if str(x) == "Var1" or ... : # I only want to show certain objects at this time
print x, getattr(Instance,x)
对我来说,它仍然看起来有些不合逻辑,所以有更好的方法吗?
namedtuple
实例具有namedtuple._asdict()
方法 ,该方法返回有序字典:
>>> from collections import namedtuple
>>> MyStruct = namedtuple("MyStruct", "Var1 Var2 Var3")
>>> value = MyStruct('foo', 'bar', 'baz')
>>> value._asdict()
OrderedDict([('Var1', 'foo'), ('Var2', 'bar'), ('Var3', 'baz')])
这为您提供了一个顺序字典,其中包含与内容相对应的键和值。
但是,我不清楚您要达到什么目标。 直接选择正确的字段到底有什么问题?
print 'Var1: {}'.format(value.Var1)
或使用str.format()
选择特定字段:
print 'Var1: {0.Var1}, Var3: {0.Var3}'.format(value)
namedtuples
可以被索引,因此您无需将其变成dict
或使用vars()
即可完成所需的工作:
MyStruct = namedtuple("MyStruct","Var1 Var2 Var3")
instance = MyStruct(1, 2, 3)
fields_to_print = {'Var1', 'Var2'}
print(', '.join('{}: {}'.format(field, instance[i])
for i, field in enumerate(instance._fields)
if field in fields_to_print))
输出:
Var1: 1, Var2: 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.