重写{…}表示法,以便获得OrderedDict()而不是dict()? - python

更新:Python 3.7+可确保保留插入顺序的字典

我想使用.py文件,例如配置文件。
因此,使用{...}表示法,我可以使用字符串作为键来创建字典,但是在标准的python字典中定义顺序丢失了。

我的问题:是否可以覆盖{...}表示法,以便获得OrderedDict()而不是dict()

我希望仅使用OrderedDict(dict = OrderedDict)覆盖dict构造函数即可,但没有用。

例如:

dict = OrderedDict
dictname = {
   'B key': 'value1',
   'A key': 'value2',
   'C key': 'value3'
   }

print dictname.items()

输出:

[('B key', 'value1'), ('A key', 'value2'), ('C key', 'value3')]

参考方案

这几乎可以为您提供所需的语法:

class _OrderedDictMaker(object):
    def __getitem__(self, keys):
        if not isinstance(keys, tuple):
            keys = (keys,)
        assert all(isinstance(key, slice) for key in keys)

        return OrderedDict([(k.start, k.stop) for k in keys])

ordereddict = _OrderedDictMaker()
from nastyhacks import ordereddict

menu = ordereddict[
   "about" : "about",
   "login" : "login",
   'signup': "signup"
]

编辑:另一个人独立发现了此问题,并在PyPI上发布了 odictliteral 软件包,该软件包提供了更全面的实现-使用该软件包代替

如何在Linux上安装2个Anacondas(Python 2.7和3.5)? - python

我想使用Python 2和3版本。我已经读过有关conda环境的用法,但是不断向终端source (de)activate py27写入内容似乎不方便。如picture所示,如何使用命令选择内核版本? 参考方案 您在该图像中寻找的是Jupyter Notebook。您需要使用Jupyter和所需的python版本创建环境:conda create -n py…

如何访问页面内的第三方跟踪参数(通过Python)? - python

我已经搜索了很多,到目前为止,还无法确定如何访问页面中的第三方跟踪参数。使用下面的代码,我可以通过python request软件包访问页面的cookie,但是仅对于本地域,不会返回任何第三方的cookie /域:import requests # create session s = requests.session() # read data from …

为什么在for循环中将单词从复数形式转换为单数形式会花费这么长时间(Python 3)? - python

这是我的代码,用于从CSV文件读取文本并将一列中的所有单词从复数形式转换为单数形式:import pandas as pd from textblob import TextBlob as tb data = pd.read_csv(r'path\to\data.csv') for i in range(len(data)): blob …

如何在“后台”中运行脚本的一部分(单个函数)? - python

我在具有以下基本结构(伪代码)的服务器上运行python脚本:for data_item in data_items: processed_result=process_data(data_item); #this takes time T0 upload_result_to_site(processed_result) #this takes time T…

在返回'Response'(Python)中传递多个参数 - python

我在Angular工作,正在使用Http请求和响应。是否可以在“响应”中发送多个参数。角度文件:this.http.get("api/agent/applicationaware").subscribe((data:any)... python文件:def get(request): ... return Response(seriali…