def xml_to_comparable_dict(xml):
def _sort_key(value):
"""Recursively sort lists embedded within dicts."""
if hasattr(value, 'items'):
return six.text_type(sorted([(k, _sort_key(v)) for k, v in value.items()]))
elif isinstance(value, (tuple, set, list)):
return six.text_type(sorted(value, key=_sort_key))
else:
return six.text_type(value)
def _unorder(value):
"""Convert from a `collections.OrderedDict` to a `dict` with predictably sorted lists."""
if hasattr(value, 'items'):
return {k: _unorder(v) for k, v in value.items()}
elif isinstance(value, (tuple, set, list)):
return sorted(tuple(_unorder(v) for v in value), key=_sort_key)
else:
return value
return _unorder(xmltodict.parse(xml))
评论列表
文章目录