什么时候应该使用字典、列表或集合?

是否存在更适合每种数据类型的场景?


当前回答

当您需要唯一元素的无序集合时,请使用set。(例如,当您需要文档中使用的所有单词的集合时)。

当你想收集一个不可变的有序元素列表时,使用元组。(例如,当您希望将(name, phone_number)对用作集合中的元素时,您将需要元组而不是列表,因为集合要求元素是不可变的)。

当您想收集一个可变的有序元素列表时,请使用列表。(例如,当您想要将新的电话号码追加到列表:[number1, number2,…])。

当您需要从键映射到值时,请使用字典。(例如,当你想要一个将名字映射到电话号码的电话簿:{'John Smith': '555-1212'})。注意字典中的键是无序的。(如果你遍历字典(电话簿),键(名字)可能以任何顺序出现)。

其他回答

字典:当你想用索引以外的东西来查找某个东西时。例子:

dictionary_of_transport = {
    "cars": 8,
    "boats": 2,
    "planes": 0
}
print("I have the following amount of planes:")
print(dictionary_of_transport["planes"])
#Output: 0

列表和集:当您想要添加和删除值时。 列表:使用索引查找值 集:存储值,但不能使用任何方法访问它们。

list保持顺序,dict和set则不然:因此,当您关心顺序时,必须使用list(当然,如果您选择的容器仅限于这三种;-))。

Dict将每个键与值关联,而list和set只包含值:显然,这是非常不同的用例。

Set要求项是可哈希的,list不需要:因此,如果你有不可哈希的项,你不能使用Set,而必须使用list。

集合禁止重复,列表不重复:也是一个至关重要的区别。(在集合中可以找到一个“multiset”,它将重复项映射到一个不同的计数中,用于出现一次以上的项目。Counter——如果出于某种奇怪的原因无法导入集合,可以将其构建为dict,或者在2.7之前的Python中,将其作为collections.defaultdict(int),使用项作为键,并将相关值作为计数)。

在一个集合(或dict,键)中检查一个值的成员关系非常快(大约需要一个常数,很短的时间),而在一个列表中,在平均和最坏的情况下,它所花费的时间与列表的长度成正比。所以,如果你有可哈希的项,不关心顺序或重复,并且想要快速的成员检查,set比list更好。

字典:python字典就像一个哈希表,以键作为索引,对象作为值。

列表:列表用于保存数组中的对象,并根据该对象在数组中的位置进行索引。

Set: Set是一个带有函数的集合,这些函数可以判断一个对象是否存在于集合中。

当您有一组映射到值的唯一键时,请使用字典。 如果你有一个有序的项目集合,可以使用列表。 使用集合存储一组无序的项。

与列表、字典和集合相结合,还有另一个有趣的python对象OrderedDicts。

有序字典就像普通字典一样,但是它们会记住条目插入的顺序。在有序字典上迭代时,项将按照键第一次添加的顺序返回。

OrderedDicts在需要保留键的顺序时可能很有用,例如处理文档:通常需要文档中所有术语的向量表示。因此,使用OrderedDicts,您可以有效地验证一个项之前是否已读取,添加项,提取项,在所有操作之后,您可以提取它们的有序向量表示。