いつもお世話になっております。
下記のようなxmlから辞書に変換したいのですが、自分の知識では正確な書き方が分かりませんでした。
補足事項
・欲しい辞書のキー⇒subcodesで固定
・欲しい辞書の値
{option name属性}:{option value属性}#{option name属性}:{option value属性}={SubCodeのcode属性} |
{option name属性}:{option value属性}#{option name属性}:{option value属性}={SubCodeのcode属性}
Subcode要素が増えたら区切り「|」の数が増えます。
Option要素が増えたら区切り「#」の数が増えます。
Option要素の数は変動しますが、各Subcode要素の中に入るOptionの数と並びは共通です。
分かり辛く申し訳ありません。。
xml
1 <Result> 2 <SubCodes> 3 <SubCode code="item-code-red-s"> 4 <Option name="カラー" value="red"/> 5 <Option name="サイズ" value="small"/> 6 </SubCode> 7 <SubCode code="item-code-red-m"> 8 <Option name="カラー" value="red"/> 9 <Option name="サイズ" value="medium"/> 10 </SubCode> 11 ・ 12 ・(中略) 13 ・ 14 </SubCodes> 15 </Result>
欲しい辞書型↓
python
1dict = {'subcodes:':'カラー:red#サイズ:small=item-code-red-s|カラー:red#サイズ:medium=item-code-red-m'}
試したコード
色々書いたり消したりして今のところ下記のコードになったのですが、これだと希望の区切り文字がバラバラのため区切り文字を変化させるのが難く躓いております。
python
1import xml.etree.ElementTree as ET 2 3subcodes = root.findall('Result/SubCodes/SubCode') 4dict = {} 5for subcode in subcodes: 6 lst = [] 7 code = subcode.attrib['code'] 8 options = subcode.findall('Option') 9 10 for option in options: 11 lst.append(option.attrib['name']) 12 lst.append(option.attrib['value']) 13 14 lst.append(code) 15 print(lst) 16 17 ''' 18 #一つの区切り文字しかできない 19 dict['subcodes'] = ','.join(lst) 20 21 #要素数が変動するので何番目などで条件分けできない 22 str = '' 23 for idx, val in lst: 24 if idx == 0: 25 str += val + ':' 26 (略) 27 ''' 28 29 30 31#lst 32#['カラー', 'red', 'サイズ', 'small', 'item-code-red-s'] 33#['カラー', 'red', 'サイズ', 'medium', 'item-code-red-m'] 34 35 36
エラー画面を添付しました。
このoptionの部分でInstance of dict has no attrib memberとなります。
回答2件
あなたの回答
tips
プレビュー