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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Python中,何时使用Dictionary,List或Set?相关的知识,希望对你有一定的参考价值。

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

是否存在更适合每种数据类型的方案?

答案

list保持秩序,dictset不会:当你关心订单时,你必须使用list(如果你选择的容器当然限于这三个;-)。

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

set要求物品是可清洗的,list不会:如果你有不可清洗的物品,因此,你不能使用set而必须使用list

set禁止重复,list不:也是一个至关重要的区别。 (一个“multiset”,它将重复项映射到不止一次出现的项目的不同计数,可以在collections.Counter中找到 - 你可以建立一个作为dict,如果由于一些奇怪的原因你不能导入collections,或者, pre-2.7 Python作为collections.defaultdict(int),使用项目作为键,相关值作为计数)。

检查set(或dict,用于键)中的值的成员资格是非常快(占用大约一个恒定的短时间),而在列表中,它需要与平均和最差情况下的列表长度成比例的时间。所以,如果你有可用的项目,不管关于订单或重复,并且想要快速的会员检查,setlist更好。

另一答案
  • 你只需要有序的物品序列吗?去寻找一个清单。
  • 您是否只需要知道您是否已经获得特定值,但是没有订购(并且您不需要存储重复项)?使用一套。
  • 您是否需要将值与键相关联,以便稍后可以有效地(通过键)查找它们?使用字典。
另一答案
  • 如果有一组映射到值的唯一键,请使用字典。
  • 如果您有一个有序的项目集合,请使用列表。
  • 使用集合来存储无序的项目集。
另一答案

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

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

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

如果需要从键到值的映射,请使用dict。 (例如,当您需要将姓名映射到电话号码的电话簿时:{'John Smith' : '555-1212'})。请注意,dict中的键是无序的。 (如果您遍历dict(电话簿),则键(名称)可以按任何顺序显示)。

另一答案

虽然这不包括sets,但它是对dicts和lists的一个很好的解释:

列表就是他们看起来的 - 一系列价值观。它们中的每一个都是编号的,从零开始 - 第一个编号为零,第二个编号为1,第三个编号为2,等等。您可以从列表中删除值,并在末尾添加新值。示例:您的许多猫的名字。

字典与他们的名字相似 - 字典。在字典中,您有一个单词的“索引”,并且每个单词都有一个定义。在python中,单词称为“键”,定义称为“值”。字典中的值没有编号 - 与其名称相似 - 字典。在字典中,您有一个单词的“索引”,并且每个单词都有一个定义。字典中的值没有编号 - 它们也没有任何特定的顺序 - 键也做同样的事情。您可以添加,删除和修改词典中的值。示例:电话簿。

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

另一答案

使用它们时,我会制作一份详尽的方法备忘单供您参考:

class ContainerMethods:
    def __init__(self):
        self.list_methods_11 = {
                    'Add':{'append','extend','insert'},
                    'Subtract':{'pop','remove'},
                    'Sort':{'reverse', 'sort'},
                    'Search':{'count', 'index'},
                    'Entire':{'clear','copy'},
                            }
        self.tuple_methods_2 = {'Search':'count','index'}

        self.dict_methods_11 = {
                    'Views':{'keys', 'values', 'items'},
                    'Add':{'update'},
                    'Subtract':{'pop', 'popitem',},
                    'Extract':{'get','setdefault',},
                    'Entire':{ 'clear', 'copy','fromkeys'},
                            }
        self.set_methods_17 ={
                    'Add':{['add', 'update'],['difference_update','symmetric_difference_update','intersection_update']},
                    'Subtract':{'pop', 'remove','discard'},
                    'Relation':{'isdisjoint', 'issubset', 'issuperset'},
                    'operation':{'union' 'intersection','difference', 'symmetric_difference'}
                    'Entire':{'clear', 'copy'}}
另一答案

列表就是他们看起来的 - 一系列价值观。它们中的每一个都是编号的,从零开始 - 第一个编号为零,第二个编号为1,第三个编号为2,等等。您可以从列表中删除值,并在末尾添加新值。示例:您的许多猫的名字。

元组就像列表一样,但你无法改变它们的值。您首先给出的值是您为该程序的其余部分所遵循的值。同样,每个值从零开始编号,以便于参考。示例:一年中的月份名称。

字典与他们的名字相似 - 字典。在字典中,您有一个单词的“索引”,并且每个单词都有一个定义。在python中,单词称为“键”,定义称为“值”。字典中的值没有编号 - 与其名称相似 - 字典。在字典中,您有一个单词的“索引”,并且每个单词都有一个定义。在python中,单词称为“键”,定义称为“值”。字典中的值没有编号 - 它们也没有任何特定的顺序 - 键也做同样的事情。您可以添加,删除和修改词典中的值。示例:电话簿。

另一答案

结合列表,dicts和集合,还有另一个有趣的python对象,OrderedDicts

有序词典就像常规词典一样,但它们记住了项目的插入顺序。迭代有序字典时,将按照首次添加键的顺序返回项目。

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

另一答案

对于C ++,我总是记住这个流程图:In which scenario do I use a particular STL container?,所以我很好奇Python3也有类似的东西,但我没有运气。

你需要记住的是Python:C ++没有单一的Python标准。因此,不同的Python解释器(例如CPython,PyPy)可能存在巨大差异。以下流程图适用于CPython。

此外,我发现没有很好的方法将以下数据结构合并到图表中:bytesbyte arraystuplesnamed_tuplesChainMapCounterarrays

  • OrderedDictdeque可通过collections模块获得。
  • heapq可从heapq模块获得
  • LifoQueueQueuePriorityQueue可通过queue模块获得,该模块专为并发(线程)访问而设计。 (还有一个multiprocessing.Queue可用,但我不知道与queue.Queue的差异,但会假设它应该在需要从进程并发访问时使用。)
  • qazxsw poi,qazxsw poi,qazxsw poi和dict当然是建在当然

对于任何人,如果你能改进这个答案并在各个方面提供更好的图表,我将不胜感激。随意欢迎。 set

PS:图表是用yed制作的。 graphml文件frozen_set

以上是关于在Python中,何时使用Dictionary,List或Set?的主要内容,如果未能解决你的问题,请参考以下文章

.Net 数据结构:ArrayList、List、HashTable、Dictionary、SortedList、SortedDictionary——速度、内存以及何时使用它们? [关闭]

使用Python Dictionary在Python中合并CSV文件

Swift 中的 AnyObject 和 Any

C#字典 Dictionary 的使用

python之字典(Dictionary)

python中字典dictionary详解及基本使用