其实我有一个词典
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.....
我正在使用代码 A = [] B = [] C = [] d = [] E = [] for k,v in x1.iteritems(): 如果k.split(“;”)。count('0')== 1:#我正在使用这个bcoz a; 0,b; 0包含标签,所以我检查它们是否包含零分割它。 a = k.split(“;”)#this包含a = ['a','0','b','0'] b = v.split(“;”)#这包含'a; 0','b; 0'值 其他: c = v.split(“;”)#这包含'a; 1','b; 1'值 对于范围内的i(0,len(b)): d = B [i]于 E = C [1] 打印“&lt;%s&gt;%s&lt;%s&gt;”%(c,e,c) 实际上,当单个组进入时,此代码仅工作50% dict('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 :(得分: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方法。