在Python中,何时使用Dictionary,List或Set?

我应该什么时候使用字典,列表或设置?

是否有更适合每种数据types的场景?

一个list保持秩序, dictset不:当你关心秩序,因此,你必须使用list (如果你select的容器限于这三个,当然;-)。

dict将每个键与一个值相关联,而listset只是包含值:显然,用例非常不同。

set需要项目是可哈希的, list不会:如果你有非可哈希项目,因此,你不能使用set而必须使用list

set禁止重复, list不:重要的区别。 (可以在collections.Counterfind一个“multiset”,它将重复项目映射到一个不同的项目中,可以在collections.Counterfindcollections.Counter – 如果出于某种奇怪的原因,您不能导入collections , ,在2.7之前的Python中,作为collections.defaultdict(int) ,使用项目作为关键字,关联的值作为count)。

在一个set (或dict ,对于键)中检查一个值的成员资格是非常快的(大约是一个恒定的短时间),而在一个列表中,在平均和最差的情况下,它需要的时间与列表的长度成正比。 所以,如果你有可sorting的项目,不要在意有关订单或重复的任何方式,并希望迅速成员检查, setlist

  • 你只需要一个有序的项目序列? 去一个清单。
  • 你只需要知道你是否已经一个特定的价值,但没有订购(你不需要存储重复)? 使用一套。
  • 你需要将值与键相关联,所以你可以稍后有效地查找它们(通过键)? 使用字典。
  • 如果有一组映射到值的唯一键,请使用字典。

  • 如果您有一个有序的项目集合,请使用列表。

  • 使用一组来存储一组无序的项目。

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

当你想收集一个不可变的有序元素列表时,使用一个tuple 。 (例如,当你想要一个(名称,电话号码)对,你希望用作一个集中的元素,你需要一个元组而不是一个列表,因为集合要求元素是不可变的)。

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

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

虽然这不包括set ,这是一个很好的解释的dictlist s:

列表是他们所看到的 – 值的列表。 它们中的每一个都被编号,从零开始 – 第一个编号为零,第二个1,第三个2等。您可以从列表中删除值,并将新值添加到结尾。 例如:你的许多猫的名字。

字典类似于他们的名字所暗示的 – 字典。 在字典中,你有一个“索引”的单词,并为他们每个人的定义。 在Python中,这个词被称为“键”,定义为“值”。 字典中的值不会被编号 – 与他们的名字所暗示的类似 – 字典。 在字典中,你有一个“索引”的单词,并为他们每个人的定义。 字典中的值不会被编号 – 它们也不是以任何特定的顺序 – 关键是做同样的事情。 您可以添加,删除和修改字典中的值。 例如:电话簿。

http://www.sthurlow.com/python/lesson06/

列表是他们所看到的 – 值的列表。 它们中的每一个都被编号,从零开始 – 第一个编号为零,第二个1,第三个2等。您可以从列表中删除值,并将新值添加到结尾。 例如:你的许多猫的名字。

元组就像列表,但是你不能改变它们的值。 首先给出的值是您在程序的其余部分所坚持的值。 再次,每个值从零开始编号,以便于参考。 例如:一年中的月份名称。

字典类似于他们的名字所暗示的 – 字典。 在字典中,你有一个“索引”的单词,并为他们每个人的定义。 在Python中,这个词被称为“键”,定义为“值”。 字典中的值不会被编号 – 与他们的名字所暗示的类似 – 字典。 在字典中,你有一个“索引”的单词,并为他们每个人的定义。 在Python中,这个词被称为“键”,定义为“值”。 字典中的值不会被编号 – 它们也不是以任何特定的顺序 – 关键是做同样的事情。 您可以添加,删除和修改字典中的值。 例如:电话簿。