1

2 つの変数の内容を辞書に入れるソリューションを探しています。1 つの変数がキーとして機能し、もう 1 つの変数が値として機能する必要があります。

これが私のコードです:

dom = parseString(data)
macro=dom.getElementsByTagName('macro')
for node in macro:
    d={}
    id_name=node.getElementsByTagName('id')[0].toxml()
    id_data=id_name.replace('<id>','').replace('</id>','')
    print (id_data)
    cl_name=node.getElementsByTagName('cl2')[0].toxml()
    cl_data=cl_name.replace('<cl2>','').replace('</cl2>','')
    print (cl_data)

追加時に古いデータを上書きせずに、キーとして id_data と値として cl_data を持つ辞書が必要です。これについてどうすればいいですか?

助けてくれてありがとう!

4

1 に答える 1

2
from collections import defaultdict

d=defaultdict(list)

dom = parseString(data)
macro=dom.getElementsByTagName('macro')
for node in macro:
    id_name=node.getElementsByTagName('id')[0].toxml()
    id_data=id_name.replace('<id>','').replace('</id>','')
    print (id_data)
    cl_name=node.getElementsByTagName('cl2')[0].toxml()
    cl_data=cl_name.replace('<cl2>','').replace('</cl2>','')
    print (cl_data)
    d[id_data].append(cl_data)

のキーはdさまざまなsであり、要素は見つかっid_dataたそれぞれに対応する要素のリストです。id_dataもちろん、すべてid_dataが一意であることが確実な場合は、通常の辞書を使用できます。

d={}
for node in macro:
    ...
    d[id_data]=cl_data

これは、辞書コンストラクターをループから引き出したという点で元のコードとは異なり(ループ内で毎回辞書を置き換えたくない)、実際には要素を挿入しますが、実際にdictはそれを行ったと思います。また、あなたはそれを見せないだけです。

于 2012-07-16T14:00:39.760 に答える