2012-03-08 39 views
0

字典值其实我有一个字典如何打印基于含有键分隔符

x1={'b;0':'A1;B2;C3','b;1':'aa1;aa2;aa3','a;1': 'a1;a2;a3', 'a;0': 'A;B;C'} 

其实在这里我的约定'a;0','b;0'将包含标签和'a;1','b;1'将在此基础上,我必须组和打印有相应的值, 。 从该字典内我想要什么输出是

<a>  #this is group name 
<A>a1</A> # this are tags n values 
<B>a2</B> 
<C>a3</C> 
</a> 
<b> 
<A1>aa1</A1> 
<B2>aa2</B2> 
<C1>aa3</C1> 
</b> 

这就是我喜欢这个多组中给出的样品字典可能会像c;0:.... d;0.....

我使用代码等 一个= [] B = [ ] c = [] d = [] e = [] for k,v in x1.iteritems(): if k.split(“;”)。count('0')== 1:#我使用这个bcoz a; 0,b; 0包含标签,所以我检查它们是否包含零分裂。这个包含'a','0','b','0'] b = v.split(“;”)# 0','b; 0'值 else: c = v.split(“;”)#这包含'a; 1','b; 1'值 (i,范围为0,len(b) ): d = b [i] e = c [i] print“<%s>%s <%s>”%(c,e,c) 实际上,这个代码在单组时只有50% ('a; 1':'a1; a2; a3','a; 0':'A; B; C')并且当多个组在他们的 dict('b; 0': 'A1; B2; C3','b; 1':'aa1; aa2; aa3','a; 1':'a1; a2; a3','a; 0':'A; B; C') 在这两种情况下它打印 AA1 AA2 AA3 其只打印最近的值不是所有的值

+0

呃......?请格式化代码。 – wim 2012-03-08 06:26:45

+2

也许有更好的方式来存储您的数据。 – monkut 2012-03-08 06:36:14

+0

@wim我是新来的python,我想现在它的格式我想。你可以说我的代码为这个 – user1182090 2012-03-08 06:48:01

回答

1

注意:字典没有秩序。所以iteritems()循环不一定以'b; 0'开头。尝试例如

for k,v in x1.iteritems(): 
    print k 

看到的。在我的电脑它给

a;1 
a;0 
b;0 
b;1 

,因为你的代码假定键来在它们出现在X1的定义为了这给出了一个问题[编辑:或者说,他们来了才能。你可以例如而不是重复排序的键:

for k in sorted(x1.keys()): 
    v = x1[k] 
    print k, v 

然后解决了订单的问题。但是我认为你的代码有更多的问题。

编辑:数据结构:

它可能是更好的存储你的数据在某种程度上像

x1 = {'a': [('A','a1'),('B','a2'),('C','a3')], 'b': ... } 

,如果你不能改变格式,这是怎么了,你可以转换你的数据:

x1f = {} 
for k in x1.iterkeys(): 
    tag, id = k.split(';') 
    if int(id) == 0: 
     x1f[tag] = zip(x1[k].split(';'), x1[tag+';'+'1'].split(';')) 
print x1f 

从那里它应该更容易转换到所需的输出。

,并根据如果你想扩展输出的复杂性在未来, 你可能要考虑使用的PyXML:

from xml.dom import minidom 
doc = minidom.Document() 

那么你可以使用createElement和的appendChild方法。

+0

谢谢@ Kyss陶在打印顺序,现在我需要分裂和打印的XML格式,我发布与问题 – user1182090 2012-03-08 08:54:48

+0

家伙任何人都帮我解决这个问题..它不打印所有的价值。 – user1182090 2012-03-08 10:18:53

+0

请更新您的代码,以免遇到我解释的问题;确保它被格式化;并追加它产​​生的错误消息,或者你得到的意外输出 – 2012-03-08 15:54:08