python字典与xml相互转换、字典与元组相互转换

论坛 期权论坛 脚本     
已经匿名di用户   2022-5-29 19:19   1715   0

一、 字典与xml相互转换

在转换前,需要先安装一下依赖:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple bs4

1. 字典转换为xml:

def trans_dict_to_xml(data_dict):
    data_xml = []
    for k in sorted(data_dict.keys()):  # 遍历字典排序后的key
        v = data_dict.get(k)  # 取出字典中key对应的value
        if k == 'detail' and not v.startswith('<![CDATA['):  # 添加XML标记
            v = '<![CDATA[{}]]>'.format(v)
        data_xml.append('<{key}>{value}</{key}>'.format(key=k, value=v))
    return '<xml version="1.0" encoding="UTF-8" >{}</xml>'.format(''.join(data_xml))  # 返回XML

2. Xml转换为字典:

# 定义XML转字典的函数
def trans_xml_to_dict(data_xml):
    soup = BeautifulSoup(data_xml, features='xml')
    xml = soup.find('xml')  # 解析XML
    if not xml:
        return {}
    data_dict = dict([(item.name, item.text) for item in xml.find_all()])
    return data_dict

二、字典与元组相互转换

适用条件: 当只有偶数层数且内元组的个数为2个时元组才可进行转换为字典。

1. 元组转换为字典 tuple-> dict

可以直接通过dict()函数进行转换

EDUCATION_CHOICE = (
    (0, '初中'),
    (1, '高中'),
    (2, '大专'),
    (3, '本科'),
    (4, '硕士'),
    (5, '博士'),
)
print(dict(EDUCATION_CHOICE))

打印结果:

{0: '初中', 1: '高中', 2: '大专', 3: '本科', 4: '硕士', 5: '博士'}

2. 字典转换为元组 dict-> tuple

如果直接使用tuple()函数,转换成的元组将会是由key组成的元组。

dict_1 = {0: '初中', 1: '高中', 2: '大专', 3: '本科', 4: '硕士', 5: '博士'}
print(tuple(dict_1))

打印结果为:

(0, 1, 2, 3, 4, 5)

可以发现如果直接tuple()函数并不能达到想要的效果,我们可以通过列表转换为元组的方式,将字典的key和value先装到列表里,然后再使用tuple()函数,即可完成转换:

dict_1 = {0: '初中', 1: '高中', 2: '大专', 3: '本科', 4: '硕士', 5: '博士'}
print(tuple(dict_1))
data1 = []
for i in dict_1:
    data1.append((i, dict_1[i]))
print(data1)
print(tuple(data1))

打印结果为:

(0, 1, 2, 3, 4, 5)
[(0, '初中'), (1, '高中'), (2, '大专'), (3, '本科'), (4, '硕士'), (5, '博士')]
((0, '初中'), (1, '高中'), (2, '大专'), (3, '本科'), (4, '硕士'), (5, '博士'))

总结:

1. 符合字典结构的元组可以直接通过dict()函数转换为字典。

2. 字典转换元组时,先需要通过遍历成列表,然后直接通过tuple()函数转换为元组。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP