首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保持OrderedDict的顺序

保持OrderedDict的顺序
EN

Stack Overflow用户
提问于 2018-12-31 22:29:18
回答 1查看 110关注 0票数 1

我有一个OrderedDict,我要传递给一个函数。在函数的某个位置,它改变了排序,尽管我不知道为什么,并且正在尝试调试它。下面是函数、函数和输出的示例:

代码语言:javascript
复制
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

那么,如果我称之为:

代码语言:javascript
复制
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.Genres.FacebookID’,'6003172932634','6003161475030'),('Item.Genres.Genre.Value','TV-Show',‘喜剧’),('Item.Main.Platform','iTunes'),('Item.Main.PlatformID',‘353736518’))

注意它是如何在"PlatformID“之前有”体裁“的,这并不是它在最初的dict中排序的方式。什么似乎是我的错误,我将如何纠正它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-01 01:02:21

如果没有一个完整的工作例子,很难准确地说出什么是错的。但是根据您展示的代码,我怀疑您的问题根本不是OrderedDict的问题,而是您在迭代时修改list_of_subdata,这将导致项目意外地被跳过。

代码语言:javascript
复制
>>> a = [1, 2, 3, 4, 5, 6, 7]
>>> for x in a:
...     print(x)
...     a.remove(x)
... 
1
3
5
7

考虑到您的使用,请考虑使用deque而不是列表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53991869

复制
相关文章

相似问题

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