假设我有一个不可变的键值对列表
"banana" : "yellow"
"apple" : "red"
"kiwi" : "green"
唯一重要的是排序,我永远不需要通过其键直接访问项目,只按顺序迭代它们并接收一对值。
那么,考虑到上面所说的,更推荐的是2d元组,字典或元组列表?
from collections import OrderedDict
two_d_tuple = (
('banana', 'yellow'),
('apple', 'red'),
('kiwi', 'green')
)
list_of_tuples = [
('banana', 'yellow'),
('apple', 'red'),
('kiwi', 'green')
]
ordered_dict = OrderedDict(list_of_tuples)
答案 0 :(得分:5)
如果您不需要根据键进行任何查找,那么我将使用一系列元组。没有理由在这里创建字典 - 你需要创建元组序列来构造字典。
如果您确实需要根据密钥查找项目,那么我将使用OrderedDict
。
答案 1 :(得分:2)
您正在描述有序的键/值对集合。这正是collections.OrderedDict
的用途,所以我肯定会使用它。
你的元组元组和元组列表试图从更基本的数据结构中构建复杂的数据结构。这当然很好,但为什么不使用已经为工作构建的数据结构?这就是batteries included的全部内容。
此外,由于collections.OrderedDict
准确反映了您所描述的数据结构,因此已经实现了更多高级功能(例如,仅对密钥进行迭代),而您必须为其他两个功能重新实现此类功能“自制“数据结构。
答案 2 :(得分:2)
决定什么是最佳格式的方法是查看效果时间......
执行时间计算为执行OrderedDict
之前的时间与执行之后的时间之间的差异;如下面的例子所示:
def compare_time(list_of_tuples):
start=datetime.datetime.now()
ordered_dict = OrderedDict(list_of_tuples)
return datetime.datetime.now()-start
从示例中可以清楚地看出,基于显示的列表,list_of_tuples
将花费最少的时间。
ori@sonoma:~$ python3 stack.py
dict 0:00:00.000016
two_d_tuple 0:00:00.000014
list_of_tuples 0:00:00.000009
话虽如此,我不确定您希望输出的顺序是什么,因为每种类型的键值对都会返回不同的顺序......
dict OrderedDict([('banana', 'yellow'), ('kiwi', 'green'), ('apple', 'red')])
two_d_tuple OrderedDict([('banana', 'yellow'), ('apple', 'red'), ('kiwi', 'green')])
list_of_tuples OrderedDict([('banana', 'yellow'), ('apple', 'red'), ('kiwi', 'green')])