我有一个要传递给函数的 OrderedDict。在函数的某个地方它改变了排序,虽然我不确定为什么并且正在尝试调试它。这是函数和函数和输出的示例:
def unnest_data(data):
path_prefix = ''
UNNESTED = OrderedDict()
list_of_subdata = [(data, ''),] # (data, prefix)
while list_of_subdata:
for subdata, path_prefix in list_of_subdata:
for key, value in subdata.items():
path = (path_prefix + '.' + key).lstrip('.').replace('.[', '[')
if not (isinstance(value, (list, dict))):
UNNESTED[path] = value
elif isinstance(value, dict):
list_of_subdata.append((value, path))
elif isinstance(value, list):
list_of_subdata.extend([(_, path) for _ in value])
list_of_subdata.remove((subdata, path_prefix))
if not list_of_subdata: break
return UNNESTED
然后,如果我称之为:
from collections import OrderedDict
data = OrderedDict([('Item', OrderedDict([('[@ID]', '288917'), ('Main', OrderedDict([('Platform', 'iTunes'), ('PlatformID', '353736518')])), ('Genres', OrderedDict([('Genre', [OrderedDict([('[@FacebookID]', '6003161475030'), ('Value', 'Comedy')]), OrderedDict([('[@FacebookID]', '6003172932634'), ('Value', 'TV-Show')])])]))]))])
unnest_data(data)
我得到一个 OrderedDict 与我原来的顺序不匹配:
OrderedDict([('Item[@ID]', '288917'), ('Item.Genres.Genre[@FacebookID]', ['6003172932634', '6003161475030']), ('Item.Genres.Genre.Value ', ['电视节目', '喜剧']), ('Item.Main.Platform', 'iTunes'), ('Item.Main.PlatformID', '353736518')])
注意它是如何在“PlatformID”之前有“流派”的,这不是它在原始字典中的排序方式。什么似乎是我的错误,我将如何解决它?