Python中是否有类似引用的东西?

时间:2014-04-15 12:33:40

标签: python

我想从XML中获取一些数据并将其返回到同一个变量中,所以在返回之前我会这样做:

for element in response:
    document = parseString(element)

    try:
        element = {
            'scopes':  document.getElementsByTagNameNS('*', 'Scopes')[0].firstChild.nodeValue,
            'address': document.getElementsByTagNameNS('*', 'XAddrs')[0].firstChild.nodeValue
        }
    except:
        element = False

return response

但是响应仍然包含原始xml数据而不是解析结果...基本上我希望element = ...值返回response值。

3 个答案:

答案 0 :(得分:0)

编辑:根据delnan和jonrsharpe提高答案。

您的代码存在的问题是,当您循环

for element in response

在每次迭代element中都会指向一个新创建的对象,并使用以下行:

element = {
            'scopes':  document.getElementsByTagNameNS('*', 'Scopes')[0].firstChild.nodeValue,
            'address': document.getElementsByTagNameNS('*', 'XAddrs')[0].firstChild.nodeValue
        }

和之前指向的对象仍然相同。你可以试试这个。

for index,element in enumerate(response):
    document = parseString(element)

    try:
        response[index]= {
            'scopes':  document.getElementsByTagNameNS('*', 'Scopes')[0].firstChild.nodeValue,
            'address': document.getElementsByTagNameNS('*', 'XAddrs')[0].firstChild.nodeValue
        }
    except:
         response[index]= False

return response

答案 1 :(得分:0)

假设响应是一个字符串列表,并且你想用解析后的元素dict替换这些字符串......,这很容易。由于列表是可变容器,因此您可以随时替换元素。无需返回列表......您传入的列表已更改。

def convert_response_to_elements(response):
    for index, element_str in enumerate(response):
        document = parseString(element_str)
        try:
            element = {
                'scopes':  document.getElementsByTagNameNS('*', 'Scopes')[0].firstChild.nodeValue,
                'address': document.getElementsByTagNameNS('*', 'XAddrs')[0].firstChild.nodeValue
        }
        except:
            element = False
        response[index] = element

答案 2 :(得分:0)

由于响应是一个列表,我会使用pythons list comprehension。这将创建新列表而不修改旧列表。

new_response = [modify_element(element) for element in response]

稍后,如果您要删除等于False的元素,可以使用filter函数:

without_false = filter(lambda element: bool(element), new_response)