簡體   English   中英

如何根據包含定界符的鍵打印字典值

[英]how to print dict values based on key containing delimiters

其實我有一個字典

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>

這是我像許多小組一樣給出的樣本dict,可能像c;0:.... d;0.....

我在x1.iteritems()中為k,v使用類似a = [] b = [] c = [] d = [] e = []的代碼:if 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(“;”)#其中包含范圍(0,len(b))中i的'a; 1','b; 1'值:d = b [i] e = c [i]打印“ <%s>%s <%s>”%(c,e,c)實際上,當dict('a; 1 ':'a1; a2; a3','a; 0':'A; B; C'),並且當多個組將它們各自的字典('b; 0':'A1; B2; C3','b; 1':'aa1; aa2; aa3','a; 1':'a1; a2; a3','a; 0':'A; B; C')在兩種情況下均打印aa1 aa2 aa3僅打印近期值並非所有值

請注意:字典沒有順序。 因此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方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM