这里我添加了一个代码来生成xml_tags,这就是我的输出:
md5 value = "sdfhsdkjgfjw35378563"
repOperation value = "push"
size value = "toolarge"
images value = "/home/rakesh/from_t_jack/imag1.ipds"
status value = "completed"
replication value = "mode"
sdlist value = "f:"
Run Code Online (Sandbox Code Playgroud)
我用过字典.我无法弄清楚sort我的字典.我想按照我声明的顺序对字典进行排序和打印.另一个问题是,如果在第6行观察到输出,则输出有点逆转,我期待:mode value = "replication".但输出是颠倒的.我不知道为什么它会以这种方式表现.我想知道如何解决这两个问题.这是我的代码.
def generate_tag(name,val):
full_tag = ''+name+' value = "'+val+'"'
return full_tag
def auto_xml(sdList,repOperation,images,status,md5):
tags = {'repOperationTag' :{'repOperation_tag_name':'repOperation' ,
'repOperation_val' : repOperation },
'modeTag' :{'mode_tag_name':'mode' ,
'mode_val' : 'replication' },
'imagesTag' :{'images_tag_name': 'images',
'images_val' : images },
'statusTag' :{'status_tag_name':'status' ,
'status_val' : status},
'sizeTag' :{'size_tag_name':'size' ,
'size_val' : 'toolarge'},
'md5Tag' :{'md5_tag_name' : 'md5' ,
'md5_val' : md5} ,
'sdListTag' :{'sdList_tag_name': 'sdlist' ,
'sdList_val' : sdList} }
count = 0
tag_len = len(tags)
while count < tag_len :
inner = tags[tags.keys()[count]]
tag_name = inner[inner.keys()[0]]
tag_val = inner[inner.keys()[1]]
full_tag = generate_tag(tag_name,tag_val)
print full_tag
count = count + 1
def myordered_dict():
from collections import OrderedDict
tags = {'A_repOperationTag' :{'tag_name':'repOperation' ,
'tag_val' : repOperation },
'B_modeTag' :{'tag_name':'mode' ,
'tag_val' : 'replication' },
'C_imagesTag' :{'tag_name': 'images',
'tag_val' : images },
'D_statusTag' :{'tag_name':'status' ,
'tag_val' : status},
'E_sizeTag' :{'tag_name':'size' ,
'tag_val' : 'toolarge'},
'F_md5Tag' :{'tag_name' : 'md5' ,
'tag_val' : md5} ,
'G_sdListTag' :{'tag_name': 'sdlist' ,
'tag_val' : sdList},
'H_machinename' :{'tag_name': 'hostname' ,
'tag_val' : 'xp_vm'} }
tags = OrderedDict(sorted(tags.items(), key=lambda t: t[0]))
Run Code Online (Sandbox Code Playgroud)
dict对象不是有序的 - 更准确地说,dict对象的顺序是依赖于实现,版本和插入顺序.这并不是说您插入密钥的顺序是您将其退回的顺序.它只暗示如果您将相同的键插入到两个不同的词典中,但顺序不同,那么您将退回的顺序并不保证是相同的.例如:
>>> print {1:1, 9:2}
{1: 1, 9: 2}
>>> print {9:1, 1:2}
{9: 1, 1: 2}
Run Code Online (Sandbox Code Playgroud)
这并不意味着密钥保持其插入顺序.请注意如果我2在结尾处插入一个密钥会发生什么:
>>> print {9:1, 1:2, 2:4}
{9: 1, 2: 4, 1: 2}
>>> print {1:1, 9:2, 2:4}
{1: 1, 2: 4, 9: 2}
Run Code Online (Sandbox Code Playgroud)
这是我回答的另一个答案,它讨论了如果你感兴趣的话,(C)python如何确定字典的顺序.
如果你需要一个dict维持秩序,你应该使用collections.OrderedDict.