如何基于包含分隔符的键打印字典值

2024-09-26 22:55:34 发布

您现在位置:Python中文网/ 问答频道 /正文

实际上我有口述

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'将有相应的值,基于此我必须分组并打印。 我想要的输出是

^{pr2}$

这是我给出的示例dict,许多组可能会像c;0:.... d;0.....

我使用的代码 a=[] b=[] c=[] d=[] e=[] 对于x1.iteritems()中的k,v: 如果k.split(“;”).count('0')==1:#我正在使用这个bcoz a;0,b;0包含标记,所以我正在检查它们是否包含零拆分。 a=k.split(“;”);包含a=['a','0','b','0'] b=v.split(“;”);这包含'a;0'、'b;0'值 其他: c=v.split(“;”);它包含'a;1'、'b;1'值 对于范围(0,len(b)): d=b[i] e=c[i] 打印“<;%s>;%s<;%s>;”%(c、e、c) 实际上,当一个组是他们的时候,这个代码只能工作50% dict('a;1':'a1;a2;a3','a;0':'a;B;C')以及当多个组r其in dict('b;0':'A1;B2;C3','b;1':'aa1;aa2;aa3','a;1':'A1;a2;a3','a;0':'a;b;C') 在这两种情况下都会打印出来 在 aa1级 aa2级 aa3级 在 它只打印最近的值而不是所有的值


Tags: 代码标记lta2a1b2dicta3
1条回答
网友
1楼 · 发布于 2024-09-26 22:55:34

注意:字典没有顺序。所以iteritems()循环不一定以“b;0”开头。举个例子

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

去看看。在我的电脑上

^{pr2}$

这就产生了一个问题,因为您的代码假设这些键按照它们在x1定义中出现的顺序出现[edit:或者更确切地说,它们是按顺序来的]。例如,您可以迭代排序键:

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方法。在

相关问题 更多 >

    热门问题