请教 Python 中 xml 转 dict 格式--不懂就问

2020-07-10 09:27:14 +08:00
 maobukui

现有 a 变量,

a = """ <xml> <fee_type></fee_type> <coupon_fee></coupon_fee> <coupon_fee></coupon_fee> </xml> """

因为“coupoen_fee”重复了,通过 xmltodict 转的 dict 格式为 {'fee_type': 'CNY', 'coupon_fee': ['10', '100']}

期待的格式是 {'fee_type': 'CNY', 'coupon_fee': '10', 'coupon_fee': '100'}

目的是得到 coupon_fee=10&coupon_fee=100&fee_type=CNY

有啥好的办法吗?

1871 次点击
所在节点    Python
10 条回复
sujin190
2020-07-10 09:37:47 +08:00
dict 的 key 啥时候能重复了,你这是犯傻了还是想要逆天无视数据结构规则了
sikariba
2020-07-10 09:47:39 +08:00
dict 的 key 是 hash 的,不能重复,你只能从 dict 序列化到 query string 的这一部分想办法
cassidyhere
2020-07-10 09:52:05 +08:00
你可以用 collections.ChainMap,或者参考 flask 里的 MultiDict:
>>> d = MultiDict([('a', 'b'), ('a', 'c')])
>>> d
MultiDict([('a', 'b'), ('a', 'c')])
>>> d['a']
'b'
>>> d.getlist('a')
['b', 'c']
lake325
2020-07-10 09:53:24 +08:00
为何要 coupon_fee=10&coupon_fee=100&fee_type=CNY ? 这种两个重复的 key 看着不另类吗?
fonlan
2020-07-10 09:55:50 +08:00
或者你就手动写解析,转成{'fee_type': 'CNY', 'coupon_fee': ['10', '100']}这样,既然是同名的 key 不如把值放入一个 list
bnm965321
2020-07-10 10:34:43 +08:00
@lake325 这种格式是 query string 规范,是正常的。但是可以用 urllib 直接从上面的 dict 转换
maobukui
2020-07-10 10:37:24 +08:00
[解决了]
抱歉可能我表述不太清楚,再简单分享下。
[诉求]
现有 xml 字符串 a = """ <xml> <fee_type></fee_type> <coupon_fee></coupon_fee> <coupon_fee></coupon_fee> </xml> """
期望得到 coupon_fee=10&coupon_fee=100&fee_type=CNY
[实现方式]
仍然 xml → dict (此时值有列表)
通过 for 循环判定值为列表情况,便利后,通过 key + "= " + value 拼接了字符串。
感谢。
maobukui
2020-07-10 10:37:38 +08:00
@sikariba 感谢
maobukui
2020-07-10 10:38:30 +08:00
@lake325 哈哈,是的!详见微信支付签名 MD5 校验,就是这样
wdf86
2020-07-10 11:20:36 +08:00
xmltodcit 这个库可以了解下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/688758

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX