Pat*_*oki 4 python dictionary tuples list python-3.x
id例如,我有监狱囚犯.每个囚犯都有一个名字.
我知道dictionarys是如何工作的,我知道元组是如何工作的,我知道列表是如何工作的,但有时候我会看到一个字典被使用,有时候会看到一个元组列表.在我的情况下我应该使用哪一个?
d = {
1: "Mike",
2: "Bob",
3: "Tom"
}
Run Code Online (Sandbox Code Playgroud)
VS
l = [
(1, "Mike"),
(2, "Bob"),
(3, "Tom")
]
Run Code Online (Sandbox Code Playgroud)
并概括了这个问题:我应该何时使用dict,何时使用元组列表,哪一个有什么好处?
在按顺序存储项目时,应使用列表.在这种情况下,唯一重要的是ID被映射到名称.
字典是映射,这意味着键和值之间的关系不对称.例如,通过已知值获取密钥是棘手的(并且在一般情况下并不总是可行),而通过任何项的值过滤元组的列表(或者一组,如此)也同样容易.
话虽这么说,在选择数据结构时,考虑如何从中检索数据是有意义的.如果你可以看到id和name类似C的东西相同struct(例如你需要通过它们中的任何一个进行搜索等)那么你最好使用元组或者collections.namedtuple.您仍然可以将它们放在列表或集合中,具体取决于您是否需要保留它.
但是,如果id是一个"特殊"字段,用于检索有关该对象的其余信息,并且它保证是唯一的(好吧,"ID"表示它),并且您不需要内部订单,并且您想要恒定时间随机访问 - 当然使用字典.
它们之间有两个主要区别:
字典是无序的,元组列表是.因此,如果订购很重要,请使用后者.
将键映射到值在dict中占用恒定时间,在元组列表中执行相同操作需要线性时间.因此,键值对的数量越大,扫描元组列表以查找匹配所需的时间就越多,而在字典中,查找几乎是即时的.
(如果您的元组按排序顺序保存,则可以使用二进制搜索将搜索时间缩短为O(log n);但这仍然比字典的常量时间慢.
在大多数情况下,您使用a dict.即使需要订购,您也可以使用a collections.OrderedDict来获得两全其美.