python—打印字典 ,collection模块中Orderedict用法,字典与文件
一. python 中,如果字典里面又有字典,则输出不好看。
方法一:使用内置的pprint
方法二:自己写一个函数
method 1:
Python代码
>>> d = {1:{'who':{'name':'Michael','age':20,'job':{'P':'90-91','G':'91-93'}}},2:{'who':{'name':'Mary','age':18,'job':{'P':'90-93','G':'93-95'}}}} >>> d {1: {'who': {'job': {'P': '90-91', 'G': '91-93'}, 'age': 20, 'name': 'Michael'}}, 2: {'who': {'job': {'P': '90-93', 'G': '93-95'}, 'age': 18, 'name': 'Mary'}}} >>> import pprint >>> pprint.pprint(d) {1: {'who': {'age': 20, 'job': {'G': '91-93', 'P': '90-91'}, 'name': 'Michael'}}, 2: {'who': {'age': 18, 'job': {'G': '93-95', 'P': '90-93'}, 'name': 'Mary'}}}
method 2:
Python代码
>>> d = {1:{'who':{'name':'Michael','age':20,'job':{'P':'90-91','G':'91-93'}}},2:{'who':{'name':'Mary','age':18,'job':{'P':'90-93','G':'93-95'}}}} >>> d {1: {'who': {'job': {'P': '90-91', 'G': '91-93'}, 'age': 20, 'name': 'Michael'}}, 2: {'who': {'job': {'P': '90-93', 'G': '93-95'}, 'age': 18, 'name': 'Mary'}}} >>> def print_dict (d,n=0): for k,v in d.items(): print '\t'*n, if type(v)==type({}): print "%s : {" % k print_dict(v,n+1) else: print("%s : %s" % (k,v)) if n!=0: print '\t'*(n-1)+ '}' >>> print_dict(d) 1 : { who : { job : { P : 90-91 G : 91-93 } age : 20 name : Michael } } 2 : { who : { job : { P : 90-93 G : 93-95 } age : 18 name : Mary } }
二.Orderedict
orderdDict是对字典类型的补充,他记住了字典元素添加的顺序
注意:字典默认循环只输出key
复制代码 import collections dic = collections.OrderedDict() dic["k1"] = "v1" dic["k2"] = "v2" dic["k3"] = "v3" print(dic) #实现原理:相当于用列表(有序)来维护字典(无序)排序,以下仅供理解 # dic = {"k1":"v1","k2":"v2"} # li = ["k1","k2"] # for i in li: # print(dic.get(i)) 执行结果:无论执行多少次结果一样 OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])
def popitem(self, last=True):
#有序删除和指定删除 import collections dic = collections.OrderedDict() dic["k1"] = "v1" dic["k2"] = "v2" dic["k3"] = "v3" print(dic) dic.popitem() #有序拿掉,每次拿掉最后一个,相当于内存的栈存放,后进先出原则,而pop()就是强制拿出指定的值 print(dic) 执行结果: OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')]) OrderedDict([('k1', 'v1'), ('k2', 'v2')])
def move_to_end(self, key, last=True):
#把指定键值移到最后 import collections dic = collections.OrderedDict() dic["k1"] = "v1" dic["k2"] = "v2" dic["k3"] = "v3" print(dic) dic.move_to_end("k1") #把指定键值移到最后 print(dic) #执行结果: OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')]) OrderedDict([('k2', 'v2'), ('k3', 'v3'), ('k1', 'v1')])
def setdefault(self, key, default=None):
#添加默认键 import collections dic = collections.OrderedDict() dic["k1"] = "v1" dic["k2"] = "v2" dic["k3"] = "v3" print(dic) dic.setdefault("k4","v4") #默认键值为None,不过可以添加值 print(dic) #执行结果: OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')]) OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3'), ('k4', 'v4')])
#举一个实例: from collections import OrderedDict items = ( ('A', 1), ('B', 2), ('C', 3) ) regular_dict = dict(items) ordered_dict = OrderedDict(items) print 'Regular Dict:' for k, v in regular_dict.items(): print k, v print 'Ordered Dict:' for k, v in ordered_dict.items(): print k, v # Result: Regular Dict: A 1 C 3 B 2 Ordered Dict: A 1 B 2 C 3
tcode={} transcode={} def GetTcode(): #从文本中获取英文对应的故障码,并保存在tcode字典(故障码文本样例:oxff,0xff,0x00,0x01, "Fuel Volume Regulator Control Circuit High") with open('text_en.txt','r+')as fileone: for line in fileone.readlines(): if not line: continue line=line.strip() titems=line.split('\t') strkey=titems[0].lower() strtemp=titems[1] tcode[strkey]=strtemp def GetTransCode(): #从文本中获取中文对应的故障码,并保存在tcode字典(故障码文本样例:oxff,0xff,0x00,0x01, "燃油调节器控制电路过高") with open('text_cn.txt','r+') as fileone: for line in fileone.readlines(): if not line: continue line=line.strip() transcode[line.split('\t')[0].lower()]=line.split('\t')[1] def ReplaTransCode(): #将已经翻译的中文故障码在英文文本中用ID查找出来并替换,对新的tcode字典key进行排序,并写入新的文本中 for findkey in transcode.keys(): if tcode.get(findkey,-1)!= -1: tcode[findkey]=transcode[findkey] templine=[] lkeys=tcode.keys() lkeys.sort() for key in lkeys: value=tcode.get(key) key=key.upper().replace("0X","0x") templine.append("%s\t%s\n"%(key,value)) with open('text_trans.txt','w+') as filetwo: filetwo.writelines(templine) if __name__ == '__main__': GetTcode() GetTransCode() ReplaTransCode()