2016-02-10 26 views
1

我試圖做一個與dnspython zonetransfer,然後將A記錄存儲到一個字典,我可以從稍後彈出的值。請看下圖:python輸出不同時,打印到std出比存儲在字典

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不同,打印字典?請參見下面的輸出:

www 1.1.1.1 
{<DNS name www>: <DNS IN A rdata: 1.1.1.1>} 

我想澄清我的問題:如何讓我的字典的樣子: { 'www' : '1.1.1.1' }

回答

2

增加值這是發生因爲字典的內容通過在其每個鍵/值上調用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 

有沒有一個整體很多你可以做這個...你可以寫你自己你想打印並定義__repr__類的版本,所以它的行爲與__str__ 。或者您可以編寫一個自定義字典打印功能,該功能可呈現__str__而不是__repr__的結果。但是沒有內置的方法來強制print somedict使用__str__而不是__repr__

​​
-2

在字典

d['key'] = 'value'