当前位置: 首页 > 面试题库 >

覆盖{…}表示法,以便获得OrderedDict()而不是dict()?

邓嘉致
2023-03-14
问题内容

更新: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"
]

编辑:
有人独立发现了这一点,并odictliteral在PyPI上发布了该软件包,该软件包提供了更为彻底的实现-
改用该软件包



 类似资料:
  • 问题内容: 我有以下代码: 我想用新内容替换文件中的旧内容。但是,当我执行代码时,将附加文件“ test.xml”,即,我的旧内容被新的“替换”内容所取代。为了删除旧内容而只保留新内容,我该怎么办? 问题答案: 您需要先写入文件的开头,然后再使用(如果要进行就地替换): 另一种方法是读取文件,然后使用再次打开它: 无论是也将改变inode的文件的数量(我测试过两次,一次是与Ubuntu 12.04

  • 我有一个方法应该用新内容覆盖当前文件,但是FileWriter()只是附加新内容,而不是覆盖旧内容。 这是我的FileWriter的设置方式 这是保存方法 当我运行此方法时会出现问题,它没有覆盖文件,而是将新内容附加到文件中。 我想要的: 发生了什么:

  • [在这里输入图像描述][1][在这里输入图像描述][2]我知道很多人都有类似的问题。我展示了很多答案,尝试了在声纳网站上给出的示例代码。那个样品工作得很好。我还显示以下链接 maven 3.0.5 请帮我解决这个问题。 下面是父模块pom文件 我真的觉得这是jacoco或Sonarqube的bug。可能它不兼容Java8之类的东西。我几乎什么都试过了。sonar java插件2.5.1不推荐使用许

  • 我正在使用Jacoco插件使用jenkins获得代码覆盖率。我能够看到代码覆盖率。当我尝试使用相同的jacoco.exec文件来生成声纳代码覆盖率时,它显示:由于没有类文件,无法对项目覆盖率进行JaCoCo分析。我使用以下声纳属性: 我正在使用SonarQube 5.3

  • 我正在运行一个由Kafka、Spark和Cassandra组成的1节点集群。全部本地在同一台机器上。 从一个简单的Python脚本中,我每5秒将一些虚拟数据流到一个Kafka主题中。然后使用Spark结构化流,我将这个数据流(一次一行)读入PySpark DataFrame中,并使用=。最后,我尝试将此行追加到一个已经存在的Cassandra表中。 我一直在关注(如何向Cassandra编写流数据

  • 问题内容: 我想为 isEmpty 方法添加自定义行为。 当我从 我应该重写序列化方法,因为它是抽象的。 我想按原样保留序列化方法,并仅覆盖isEmpty方法。 问题答案: 为了修改行为但保持默认的序列化,您可以利用 serializer修饰符 。您仍然必须实现自定义序列化程序,但是可以非常干净地利用默认序列化程序。 使用默认的序列化器创建一个自定义序列化器 将变量插入到您的自定义序列化器类中。当