Python:将变量值放入新字典中

时间:2012-07-16 13:58:04

标签: python dictionary

我正在寻找一种解决方案,将2个变量的内容放入字典中。一个变量应该作为键,另一个作为值。

这是我的代码:

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作为值,而不会在追加时覆盖旧数据。我怎么继续这个?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分: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的键是各种id_data个,元素是按顺序找到与每个id_data对应的元素的列表。当然,如果您可以确定所有id_data都是唯一的,那么您可以使用常规词典:

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

这与原始代码的不同之处在于我将字典构造函数从循环中拉出(您不希望每次在循环中替换字典)实际上我实际上将元素插入dict虽然我猜你也是这样做的,但你只是没有表现出来。