Python 为什么django使用元组中的元组来存储静态字典,我应该这样做吗?

Python 为什么django使用元组中的元组来存储静态字典,我应该这样做吗?,python,django,performance,dictionary,tuples,Python,Django,Performance,Dictionary,Tuples,为什么django使用元组中的元组来存储例如选项而不是标准dict 例如: ORGINAL_MARKET = 1 SECONDARY_MARKET = 2 MARKET_CHOICES = ( (ORGINAL_MARKET, _('Orginal Market')), (SECONDARY_MARKET, _('Secondary Market')), ) 当我知道口述不会及时改变时,我应该这样做吗? 我认为元组的速度更快,但当我试图获取值时,我仍然需要将其转换为dic

为什么django使用元组中的元组来存储例如
选项
而不是标准dict

例如:

ORGINAL_MARKET = 1
SECONDARY_MARKET = 2
MARKET_CHOICES = (
     (ORGINAL_MARKET, _('Orginal Market')),
     (SECONDARY_MARKET, _('Secondary Market')),
 )
当我知道口述不会及时改变时,我应该这样做吗? 我认为元组的速度更快,但当我试图获取值时,我仍然需要将其转换为dict来找到它,这有关系吗

更新:

澄清如果我使用它作为元组的元组,我将使用

dict(self.MARKET_CHOICES)[self.ORGINAL_MARKET]

哪一种工作更快,这或从一开始就将值存储在dict中?

元组是不可变的,稍微快一点,Django使用元组是因为它们在字段中的
选项
参数中是不可变的

如果您使用的是Python3.4或更高版本,那么还可以使用比元组和字典更好的(但我不确定Django是否支持它们的
选项
参数)

明确地说:我不会在选择中使用它=-我在寻找最有效的方法-洛德·贾巴


如果您希望您的选择具有特定的顺序(通常是
choices
参数的情况),则使用元组,如果您不介意,则使用您认为更容易键入的任何文字(从允许的数据类型),我怀疑您是否会看到这个特定用例在内存/cpu占用方面有任何显著差异。

主要原因是保留了顺序。例如,如果使用字典,并在其上调用
.items()
,为
选项字段
提供选择,则在呈现表单时,选择框中项目的顺序将不可靠

如果您想要dict,可以很容易地从元组的元组中创建一个,该格式已经被构造函数接受,因此您可以对其调用
dict()


我不认为不变性是一个正确的理由——严格来说,它们不必是元组的元组,元组列表,甚至列表列表在Django中也可以工作

你能用这个方法提供到Django的链接吗?下划线是什么?不仅如此(元组更精简/更快),而且元组还保留顺序,而dict不保留顺序(如果您想保留顺序,则有collections.OrderedDict)@JanVlcinsky:下划线是GNU gettext库(国际化/本地化工具)中翻译函数的别名下划线是国际化(不相关)细节的简写:django文档中的示例:问题中的“静态”字是这里的关键。由于没有静态dict,如果需要静态结构,元组可能是存储键/值对的最简单选项。如果我有一些空闲时间,我可能会将其迁移到最新的django和python 3(空闲工作时间=不会发生)
enum
后端口到python 2.7,并通过
$pip install enum34
提供。功能完全相同。不要与pypi上的
enum
包混淆,后者类似,但有点不同。