Python:打印所有命名元组

时间:2013-08-26 18:58:09

标签: python namedtuple

我有以下代码:

from collections import namedtuple

Test = namedtuple('Test', ['number_A', 'number_B'])

test_1 = Test(number_A=1, number_B=2)
test_2 = Test(number_A=3, number_B=4)
test_3 = Test(number_A=5, number_B=6)

我的问题是如何打印所有命名元组,例如:

print (Test.number_A)

我希望看到这样的结果:

1
3
5

任何想法? 感谢..

4 个答案:

答案 0 :(得分:8)

Martijn Peters在评论中提出建议:

  

不要使用编号变量。使用列表存储所有已命名的   而是元组。只需遍历列表即可打印所有包含的名称   元组。

以下是这样的:

Test = namedtuple('Test', ['number_A', 'number_B'])
tests = []
tests.append(Test(number_A=1, number_B=2))
tests.append(Test(number_A=3, number_B=4))
tests.append(Test(number_A=5, number_B=6))

for test in tests:
    print test.number_A

给出:

1
3
5

答案 1 :(得分:0)

以下是一个例子:

import collections

#Create a namedtuple class with names "a" "b" "c"
Row = collections.namedtuple("Row", ["a", "b", "c"], verbose=False, rename=False)   

row = Row(a=1,b=2,c=3) #Make a namedtuple from the Row class we created

print (row)    #Prints: Row(a=1, b=2, c=3)
print (row.a)  #Prints: 1
print (row[0]) #Prints: 1

row = Row._make([2, 3, 4]) #Make a namedtuple from a list of values

print (row)   #Prints: Row(a=2, b=3, c=4)

...来自 - What are "named tuples" in Python?

答案 2 :(得分:0)

这应该告诉你如何:

>>> from collections import namedtuple
>>> Test = namedtuple('Test', ['number_A', 'number_B'])
>>> test_1 = Test(number_A=1, number_B=2)
>>> test_2 = Test(number_A=3, number_B=4)
>>> test_3 = Test(number_A=5, number_B=6)
>>> lis = [x.number_A for x in (test_1, test_2, test_3)]
>>> lis
[1, 3, 5]
>>> print "\n".join(map(str, lis))
1
3
5
>>>

但实际上,最好的办法是使用列表而不是编号变量:

>>> from collections import namedtuple
>>> Test = namedtuple('Test', ['number_A', 'number_B'])
>>> lis = []
>>> lis.append(Test(number_A=1, number_B=2))
>>> lis.append(Test(number_A=3, number_B=4))
>>> lis.append(Test(number_A=5, number_B=6))
>>> l = [x.number_A for x in lis]
>>> l
[1, 3, 5]
>>> print "\n".join(map(str, l))
1
3
5
>>>

答案 3 :(得分:0)

您可以驱动一个跟踪其实例的子类:

from collections import namedtuple

_Test = namedtuple('_Test', ['number_A', 'number_B'])

class Test(_Test):
    _instances = []
    def __init__(self, *args, **kwargs):
        self._instances.append(self)
    def __del__(self):
        self._instances.remove(self)
    @classmethod
    def all_instances(cls, attribute):
        for inst in cls._instances:
            yield getattr(inst, attribute)

test_1 = Test(number_A=1, number_B=2)
test_2 = Test(number_A=3, number_B=4)
test_3 = Test(number_A=5, number_B=6)

for value in Test.all_instances('number_A'):
    print value

输出:

1
3
5