我希望能够在全球范围内订购词典。你知道吗
我经常发现自己在写这样的代码:
things_to_evaluate = {
'thing 1': lambda: Thing(property = 'a'),
'thing 2': lambda: Thing(property = 'b'),
...
}
...
for k, v in things_to_evaluate.iteritems():
thing = v()
result[k] = thing.process(something)
在我的例子中,字典语法是一种方便的方法来指定我想要尝试的一系列实验。现在,我想让结果按我指定的顺序出现。你知道吗
我知道这是一个可怕的东西想要,我知道散列和无序的集合和存在的OrderedDict和一切。你知道吗
尽管如此,如果我能选择仅仅为了我自己的方便,用一行代码,重写一些原始函数,并使它所有的dict都是有序的,那就太好了。你知道吗
有人知道怎么做吗?你知道吗
你不可能做到这一点,至少不把源代码修改成你最喜欢的Python实现并重建它。(而且,如果您最喜欢的实现是CPython,那么这将是一个巨大的工作量,因为
OrderedDict
不仅不是内置的,而且它甚至没有C实现,尽管这在3.5中可能会改变。)当然,您可以将名称
dict
重新绑定到collections.OrderedDict
,可以是全局性的(在您的模块中)或超全局性的(在内置中),但这不会影响文本字典的显示、字典的理解,返回字典的内置代码(包括构建类和对象的type
函数__dict__
和处理**kwargs
的解释器代码等)您可以发明自己的方式来编写} 附带的示例之一,扩展它来处理理解也不太难。但如果没有这样的东西,你最好的办法是:
OrderedDict
显示和理解,并使用带有AST转换器的导入钩子将它们转换为对OrderedDict
构造函数的调用。我相信OrderedDict
显示是^{…或:
如果顺序很重要,使用列表而不是字典。你可能根本不需要钥匙!你知道吗
如果确实需要密钥,可以使列表包含2元组(键值对)。list和tuple literal语法可以为您做到这一点,而无需对系统内部进行任何黑客攻击:
相关问题 更多 >
编程相关推荐