Python 二维元组与有序元组与元组列表

Python 二维元组与有序元组与元组列表,python,python-3.5,Python,Python 3.5,假设我有一个不可变的键值对列表 "banana" : "yellow" "apple" : "red" "kiwi" : "green" 唯一重要的是排序,我永远不需要直接通过它的键访问一个项,只需要按顺序遍历它们并接收一对值 那么,考虑到上面所说的,哪个更推荐,2d元组,字典还是元组列表 from collections import OrderedDict two_d_tuple = ( ('banana', 'yellow'), ('apple', 'red'), ('kiwi

假设我有一个不可变的键值对列表

"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)

如果不需要基于键进行任何查找,那么我将使用元组序列。没有理由在这里创建字典——无论如何,您都需要创建元组序列来构造dict


如果您确实需要根据键查找项,那么我将使用
OrderedDict

描述键/值对的有序集合。这正是collections.OrderedDict的用途,所以我肯定会使用它

元组的元组和元组列表是从更基本的元组构建复杂数据结构的尝试。这当然很好,但是为什么不使用已经为作业构建的数据结构呢?这就是一切


此外,由于
collections.OrderedDict
准确地反映了您所描述的数据结构,因此已经实现了更高级的功能(例如,仅迭代键),而您必须为其他两个“自制”重新实现这些功能数据结构。

确定最佳格式的方法是查看性能时间

执行时间计算为执行
OrderedDict
之前的时间与执行之后的时间之差;如下面的示例所示:

def compare_time(list_of_tuples):
   start=datetime.datetime.now()
   ordered_dict = OrderedDict(list_of_tuples)
   return datetime.datetime.now()-start
从这个例子可以很清楚地看出,基于所示的列表,
list\u of\u 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')]) 

答案就在问题的开头:“我有一个键:值对列表”。语义上它是一个元组列表。顺便说一下,
2d\u tuple
不是有效的python标识符。如果您更改了名称,stackoverflow的语法高亮可能会对您的帖子更满意:-)@mgilson忘记了,修复了!检查一下all的定义,你就会得到答案。每种类型都有自己的特性和用例集。简言之,使用最适合您的一个,为此,您需要逐一检查:)@Mojimi,您希望根据键或值按字母顺序升序吗?我不确定构建有序dict是否会带来太多开销,OP是否不会使用键来获取值。