python输出打印到std out时与存储在dict中时不同

python输出打印到std out时与存储在dict中时不同,python,dictionary,dns,dnspython,Python,Dictionary,Dns,Dnspython,我正在尝试使用dnspython进行分区转换,然后将a记录存储到一个字典中,以后可以从中弹出值。见下文: import dns.zone import dns.query from dns.exception import DNSException from dns.rdataclass import * from dns.rdatatype import * domain = "mydomain.com" ns = '1.2.3.4' try: zone = dns.zone.fr

我正在尝试使用
dnspython
进行分区转换,然后将a记录存储到一个字典中,以后可以从中弹出值。见下文:

import dns.zone
import dns.query
from dns.exception import DNSException
from dns.rdataclass import *
from dns.rdatatype import *

domain = "mydomain.com"
ns = '1.2.3.4'

try:
    zone = dns.zone.from_xfr(dns.query.xfr(ns, domain))
    print "Zone origin:", zone.origin
except DNSException, e:
    print e.__class__, e

for (name, ttl, rdata) in zone.iterate_rdatas('A'):
    record = { name : rdata }
    print name, rdata
    print record
为什么使用
print
时的输出与在字典中存储相同变量
name、rdata
并打印该dict时的输出不同?见下面的输出:

www 1.1.1.1
{<DNS name www>: <DNS IN A rdata: 1.1.1.1>}
www.1.1.1
{: }
我想澄清一下我的问题:我如何使这条记录看起来像:
{'www':'1.1.1'}

在字典中添加值

d['key'] = 'value'

这是因为dict的内容通过在其每个键/值上调用
repr
来表示,而直接打印对象将调用
str

例如:

>>> class Fred:
...     def __repr__(self):
...         return "value returned by repr"
...     def __str__(self):
...         return "value returned by str"
...
>>> d = {1: Fred()}
>>> print d
{1: value returned by repr}
>>> print d[1]
value returned by str
你对此无能为力。。。您可以编写自己版本的要打印的类,并定义
\uuu repr\uuu
,使其行为与
\uu str\uu
相同。或者,您可以编写一个自定义的dict打印函数来呈现
\uuuu str\uuuuuuu
的结果,而不是
\uuuu repr\uuuuu
。但是没有内置的方法强制
打印一些dict
使用
\uuuu str\uuu
而不是
\uu repr\uu

>>> print "{" + ", ".join("{} : {}".format(repr(str(key)), repr(str(value))) for key, value in d.iteritems()) + "}"
{'1' : 'value returned by str'}

我知道这是一个老问题,但我来这里是因为我有同样的问题。在阅读了Kevin的ansewr之后,我试着用“str(rdata)”替换我输入答案名称的地方,比如说“rdata”。这对我来说只返回了IP地址,而不是整个字符串,包括“rdata中的DNS:

希望能有帮助