辞書

2017-05-18 11 views
0

としてXMLフィールドを印刷これは私が使用するXMLファイルです。以下は、辞書を印刷するための私のコードですが、プログラムはここで辞書

unhashable type: 'list' error. 

を返すコードです:

def read_map(xml_node): 
    result = {} 
    for child in xml_node: 
     result[child.get('output_name') ] = child.get('input_name') 
    return result 

tree = ET.parse('substation.xml') 
root = tree.getroot() 
print(read_map(root.find('field_mapping'))) 

答えて

0

:あなたはあまりにも早く実行を終了している

import xml.etree.ElementTree as ET 

def read_field(xml_node, name): 
    return [child.get(name) for child in xml_node.iter('field')] 

def read_map(xml_node): 
    fields = dict() 

    for child in xml_node: 
     if child.tag == 'field_mapping': 
      fields = {field_name : read_field(child, field_name) for field_name 
       in ['input_name','output_name']} 

      return{ 
       fields['input_name']:fields['output_name'] 
       } 

tree = ET.parse('substation.xml') 
root = tree.getroot() 
print(read_map(root)) 
+0

うん、うまくいきました。ありがとう@デイヴィッド・スカーレット –

0

、これを試してみてくださいこの行は問題です:return { fields['input_name']:fields['output_name'] }

これは "入力名と出力名のリストと等しい値のリストと等しいキーを持つ単一のエントリ "となります。リストがdictキーになることはできないので、Pythonはそれを嫌う。

あなたがおそらくしたいのは、入力名を出力名にマッピングするdictを返すことでした。これを行うには、2つのリストをまとめて(1組のタプルのリストを作成して)ジップに変換し、各タプルをキー/値のペアとして解釈します。

だから次に上記の行を置き換える:

return dict(zip(fields['input_name'],fields['output_name']))

+0

いいえそれは動作しません。同じエラーが続いた。 –

+0

質問の一部を更新したのでコードを変更してみましょう – VMRuiz