2012-03-08 20 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