首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法获取排序结果

无法获取排序结果
EN

Stack Overflow用户
提问于 2021-05-12 14:19:07
回答 1查看 49关注 0票数 0

我正在使用Python3.5.2,并且我正在尝试使用OrderedDict获得一个按键排序的字典。

这是我正在尝试的:

代码语言:javascript
复制
import re
from collections import OrderedDict

BRACKETS_PATTERN = re.compile(r"(?P<info>.*)?\((?P<bracket_info>.*?)\)")

def transform_vertical(vertical, trans=True):
    # elearning & Massive Online Open Courses (MOOCs) => ELEARNING_AND_MASSIVE_ONLINE_OPEN_COURSES
    # Repair & Maintenance (SMB) => SMB_REPAIR_AND_MAINTENANCE
    # Digital Advertising & Marketing/Untagged Agencies => DIGITAL_ADVERTISING_AND_MARKETING_OR_UNTAGGED_AGENCIES

    if not trans:
        return vertical
    else:
        v = vertical.replace(" & ", "_AND_").replace(", ", "_AND_").replace("/", "_OR_")
        brackets_search_result = BRACKETS_PATTERN.search(v)
        result = v
        if brackets_search_result:
            bracket_info = brackets_search_result.group("bracket_info")
            info = brackets_search_result.group("info")
            if bracket_info.upper() in ("SMB", "CBV"): # todo more prefix
                result = bracket_info.upper() + "_" + info
            else:
                result = info
        result = result.replace(" ", "_").upper().strip("_")
    return result

VERTICAL_MAP = OrderedDict({
    "GAMING": OrderedDict({
        "MOBILE_GAMING": 1,
        "AR_OR_VR_GAMING": 1,
        "CONSOLE_AND_CROSS_PLATFORM_GAMING": 1,
        "ESPORTS": 1,
        "PC_GAMING": 1,
        "REAL_MONEY_GAMING": 1,
    }),
    "TRAVEL": OrderedDict({
        "AUTO_RENTAL": 1,
        "RAILROADS": 1,
        "HOTEL_AND_ACCOMODATION": 1,
        "RIDE_SHARING_OR_TAXI_SERVICES": 1,
        "TOURISM_AND_TRAVEL_SERVICES": 1,
        "TOURISM_BOARD": 1,
        "AIR": 1,
        "TRAVEL_AGENCIES_AND_GUIDES_AND_OTAS": 1,
        "CRUISES_AND_MARINE": 1,
    })
})

s = list(VERTICAL_MAP[transform_vertical("Gaming")].keys())

print(s)

我得到的无序结果如下:

代码语言:javascript
复制
['REAL_MONEY_GAMING', 'AR_OR_VR_GAMING', 'MOBILE_GAMING', 'CONSOLE_AND_CROSS_PLATFORM_GAMING', 'ESPORTS', 'PC_GAMING']

预期结果:

代码语言:javascript
复制
[ 'MOBILE_GAMING', 'AR_OR_VR_GAMING','CONSOLE_AND_CROSS_PLATFORM_GAMING', 'ESPORTS', 'PC_GAMING', 'REAL_MONEY_GAMING']

我的代码出了什么问题,以及如何获得有序结果?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-12 14:28:09

在Python3.5中,字典不是insertion ordered

您正在使用任意排序的规则字典实例化有序字典。从(键,值)元组的列表中构造每个有序的字典。

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

https://stackoverflow.com/questions/67498250

复制
相关文章

相似问题

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