首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python多次指定相同的密钥

python多次指定相同的密钥
EN

Stack Overflow用户
提问于 2016-06-21 05:49:20
回答 2查看 1.1K关注 0票数 2

我正在尝试做如下所示的xml:

代码语言:javascript
复制
<xml....
<key1>aaa </key1>
<key1>bbb</key1>
<key1>ccc</key1>
</xml>

使用python dicttoxml lib

已尝试:

代码语言:javascript
复制
quest_dict = [{'key1': 'aaa'}, {'key1': 'bbb'}, {'key1': 'ccc'}]
request_xml = dicttoxml.dicttoxml(request_dict, attr_type=False, root=False)

但是得到的xml并不是很好。感谢您的帮助!

EN

回答 2

Stack Overflow用户

发布于 2018-05-29 20:14:00

您可以创建一个带有重复键的字典,方法是用一个虚拟类包装这些键,然后在该字典上使用dicttoxml。如果顺序很重要,请使用collections.OrderedDict

代码语言:javascript
复制
from dicttoxml import dicttoxml
from collections import OrderedDict

class Node(object):
    def __init__(self, name):
        self._name = name

    def __str__(self):
        return self._name

quest_dict = OrderedDict([(Node('key1'), 'aaa'), (Node('key1'), 'bbb'), (Node('key1'), 'ccc')])
request_xml = dicttoxml(quest_dict, attr_type=False, root=False)
print(request_xml)

这将为您提供所需的输出:

代码语言:javascript
复制
b'<key1>aaa</key1><key1>bbb</key1><key1>ccc</key1>'
票数 5
EN

Stack Overflow用户

发布于 2020-01-08 07:50:19

您可以使用dicttoxml方法的custom_root和item_func参数获得所需的xml:

代码语言:javascript
复制
import dicttoxml

request_dict = ['aaa', 'bbb', 'ccc']
item_name = lambda x: 'key1'
request_xml = dicttoxml.dicttoxml(request_dict, attr_type=False, custom_root='xml', item_func=item_name)

print(request_xml.decode('utf-8'))

输出:

代码语言:javascript
复制
<xml><key1>aaa</key1><key1>bbb</key1><key1>ccc</key1></xml>

这个示例的一个扩展是解决在单个xml中有多个重复键的情况,就像<xsd:element minOccurs="0" maxOccurs="unbounded">定义的那样,这是我使用Dave的答案中的OrderedDict无法实现的。最接近的结果是使用item_funcλ来命名父级名称中的项:

代码语言:javascript
复制
import dicttoxml

xml_dict = {}
xml_dict['key1'] = ['aaa', 'bbb', 'ccc']
xml_dict['another-key'] = ['a','b','c']

item_name = lambda x: x
request_xml = dicttoxml.dicttoxml(xml_dict, attr_type=False, custom_root='xml', item_func=item_name)

print(request_xml.decode('utf-8'))

但是我们你必须从结果中删除父母:

代码语言:javascript
复制
<xml>
    <key1>
        <key1>aaa</key1>
        ...

可以应用Clean (显式):

代码语言:javascript
复制
xml_str = request_xml.decode("utf-8", "strict")
xml_str = xml_str.replace('<key1><key1>', '<key1>').replace('</key1></key1>', '</key1>')
xml_str = xml_str.replace('<another-key><another-key>', '<another-key>').replace('</another-key></another-key>', '</another-key>')
print(xml_str)

结果:

代码语言:javascript
复制
<xml>
    <key1>aaa</key1>
    ...
    <another-key>a</another-key>
    ...
</xml>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37932344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档