打印命名元组

时间:2011-09-22 21:45:46

标签: python namedtuple

在Python 2.7.1中,我可以创建一个命名元组:

from collections import namedtuple
Test = namedtuple('Test', ['this', 'that'])

我可以填充它:

my_test = Test(this=1, that=2)

我可以这样打印出来:

print(my_test)
  
    

测试(这= 1,那= 2)

  

但为什么我不能这样打印呢?

print("my_test = %r" % my_test)
  
    
      

TypeError:并非在字符串格式化期间转换所有参数

    
  

修改 我应该知道Printing tuple with string formatting in Python

5 个答案:

答案 0 :(得分:9)

由于my_test是一个元组,它将为元组中的每个项目寻找%格式。为了解决这个问题,将它包装在另一个元组中,其中唯一的元素是my_test

print("my_test = %r" % (my_test,))

不要忘记逗号。

答案 1 :(得分:2)

你可以这样做:

>>> print("my_test = %r" % str(my_test))
my_test = 'Test(this=1, that=2)'

答案 2 :(得分:2)

它将它作为2个参数解压缩。与:比较:

print("dummy1 = %s, dummy2 = %s" % ("one","two"))

在你的情况下,试着把它放在一个元组中。

print("my_test = %r" % (my_test,))

答案 3 :(得分:0)

之前的答案是有效的,但如果您不打算打印名称,这里有一个选项。这是一个单线程设计,只打印任意长度的命名元组的内容。给定一个分配给“named_tuple”的命名元组,下面产生一个逗号描述的键=值对的字符串:

', '.join(['{0}={1}'.format(k, getattr(named_tuple, k)) for k in named_tuple._fields])

答案 4 :(得分:0)

正如4.7.2. printf-style String Formatting所述,%字符串格式化或插值运算符存在问题:

  

[printf-style字符串格式化操作]表现出各种怪癖,导致许多常见错误(例如无法正确显示元组和字典)。使用较新的格式化字符串文字或str.format()接口有助于避免这些错误

例如,您现在可以这样做:

from collections import namedtuple
Test = namedtuple('Test', ['this', 'that'])
my_test = Test(this=1, that=2)
print("my_test = {0!r}".format(my_test))