Python序列结构--字典

字典:反映对应关系的映射类型

  • 字典(dict)是包含若干“键:值”元素的无序可变序列
  • 字典中元素的“键”可以是python中任意不可变数据,例如整数、实数、复数、字符串、元组等类型可哈希数据,“键”不允许重复,“值”是可以重复的。字典在内部维护的哈希表使得检索操作非常快。
字典创建与删除
  • 使用“=”

    >>> aDict = {‘server‘:‘db.diveintopython3.org‘,‘database‘:‘mysql‘}>>> x = dict()      # 创建空字典>>> x{}>>> y = {}          # 创建空字典>>> keys = [‘a‘,‘b‘,‘c‘,‘d‘]>>> values = [1,2,3,4]>>> dictionary = dict(zip(keys,values))     # 根据已有数据创建字典>>> dictionary{‘a‘: 1, ‘b‘: 2, ‘c‘: 3, ‘d‘: 4}>>> d = dict(name = ‘Dong‘, age = 39)       # 以关键参数的形式创建字典>>> d{‘name‘: ‘Dong‘, ‘age‘: 39}>>> aDict = dict.fromkeys([‘name‘,‘age‘,‘sex‘])     # 以给定内容为“键”,创建值为空的字典>>> aDict{‘name‘: None, ‘age‘: None, ‘sex‘: None}
字典推导式
  • 使用字典推导式快速生成符合特定条件的字典

    >>> {i:str(i) for i in range(1,5)}{1: ‘1‘, 2: ‘2‘, 3: ‘3‘, 4: ‘4‘}>>> x = [‘A‘,‘B‘,‘C‘,‘D‘]>>> y = [‘a‘,‘b‘,‘c‘,‘d‘]>>> {i:j for i,j in zip(x,y)}{‘A‘: ‘a‘, ‘B‘: ‘b‘, ‘C‘: ‘c‘, ‘D‘: ‘d‘}
字典元素的访问
  • 字典中每个元素表示一种映射关系或对应关系

    >>> aDict = {‘age‘:30,‘score‘:[98,97],‘name‘:‘Dong‘,‘sex‘:‘male‘}>>> aDic[‘age‘]>>> aDict[‘age‘]30>>> aDict[‘address‘]        # 字典中不存在该key时,抛出异常Traceback (most recent call last):  File "<stdin>", line 1, in <module>KeyError: ‘address‘# 处理异常方式一:>>> if ‘address‘ in aDict:...   print(aDict[‘address‘])... else:...   print(‘No Exists‘)...No Exists# 处理异常方式二:>>> try:...   print(aDict[‘address‘])... except:...   print(‘No Exist‘)...No Exist
  • get()方法:返回指定“键”的值,并且允许指定该键不存在时返回特定的“值”
    >>> aDict.get(‘age‘)30>>> aDict.get(‘adress‘,‘No Exist.‘)     # 指定键不存在时返回指定默认值‘No Exist.‘>>> import string>>> import random>>> x = string.ascii_letters + string.digits>>> z = ‘‘.join((random.choice(x) for i in range(1000)))>>> d = dict()>>> for ch in z:        # 遍历字符串统计词频...   d[ch] = d.get(ch,0) + 1...>>> for k,v in sorted(d.items()):   # 查看统计结果...   print(k,‘:‘,v)...0 : 131 : 192 : 173 : 174 : 195 : 256 : 217 : 128 : 179 : 17A : 11B : 20C : 15D : 21E : 22F : 9G : 15H : 12I : 9J : 16K : 13L : 16M : 19N : 14O : 17P : 11Q : 14R : 16S : 11T : 22U : 13V : 20W : 21X : 17Y : 14Z : 21a : 17b : 9c : 17d : 15e : 14f : 11g : 18h : 20i : 21j : 19k : 20l : 9m : 16n : 10o : 13p : 14q : 25r : 17s : 12t : 20u : 10v : 20w : 17x : 10y : 15z : 25
  • setdefault()方法:用于返回指定“键”对应的值,如果字典中不存在该“键”,就添加一个新元素并设置该“键”对应的“值”(默认为None)
    >>> aDict.setdefault(‘adress‘,‘SDIBT‘)‘SDIBT‘>>> aDict{‘age‘: 30, ‘score‘: [98, 97], ‘name‘: ‘Dong‘, ‘sex‘: ‘male‘, ‘adress‘: ‘SDIBT‘}>>> aDict.setdefault(‘age‘,23)30
  • 对字典直接进行迭代或者遍历时默认是遍历字典的“键”
    >>> aDict{‘age‘: 30, ‘score‘: [98, 97], ‘name‘: ‘Dong‘, ‘sex‘: ‘male‘, ‘adress‘: ‘SDIBT‘}>>> for item in aDict:          # 默认遍历字典的“键”...   print(item,end=‘ ‘)...age score name sex adress >>>>>> for item in aDict.items():  # 明确指定遍历字典的元素...   print(item,end=‘ ‘)...(‘age‘, 30) (‘score‘, [98, 97]) (‘name‘, ‘Dong‘) (‘sex‘, ‘male‘) (‘adress‘, ‘SDIBT‘) >>>>>> aDict.items()dict_items([(‘age‘, 30), (‘score‘, [98, 97]), (‘name‘, ‘Dong‘), (‘sex‘, ‘male‘), (‘adress‘, ‘SDIBT‘)])>>> aDict.keys()dict_keys([‘age‘, ‘score‘, ‘name‘, ‘sex‘, ‘adress‘])>>> aDict.values()dict_values([30, [98, 97], ‘Dong‘, ‘male‘, ‘SDIBT‘])
元素的添加、修改与删除
  • 当以指定“键”为下标为字典元素赋值时,该键存在表示修改,不存在表示添加

    >>> aDict = {‘age‘: 30, ‘score‘: [98, 97], ‘name‘: ‘Dong‘, ‘sex‘: ‘male‘, ‘adress‘: ‘SDIBT‘}>>> aDict[‘age‘] = 39>>> aDict{‘age‘: 39, ‘score‘: [98, 97], ‘name‘: ‘Dong‘, ‘sex‘: ‘male‘, ‘adress‘: ‘SDIBT‘}>>> aDict[‘school‘] = ‘sichuandaxue‘>>> aDict{‘age‘: 39, ‘score‘: [98, 97], ‘name‘: ‘Dong‘, ‘sex‘: ‘male‘, ‘adress‘: ‘SDIBT‘, ‘school‘: ‘sichuandaxue‘}
  • update()方法可以将另外一个字典的“键:值”一次性全部添加到当前字典对象,如果两个字典中存在相同的“键”,则以另一个字典中的“值”为准对当前字典进行更新
    >>> aDict = {‘age‘: 30, ‘score‘: [98, 97], ‘name‘: ‘Dong‘, ‘sex‘: ‘male‘, ‘adress‘: ‘SDIBT‘}>>> aDict.update({‘a‘: 87, ‘age‘:39})>>> aDict{‘age‘: 39, ‘score‘: [98, 97], ‘name‘: ‘Dong‘, ‘sex‘: ‘male‘, ‘adress‘: ‘SDIBT‘, ‘a‘: 87}
  • del命令删除字典中指定的元素
    >>> aDict = {‘age‘: 30, ‘score‘: [98, 97], ‘name‘: ‘Dong‘, ‘sex‘: ‘male‘, ‘adress‘: ‘SDIBT‘}>>> del aDict[‘adress‘]>>> aDict{‘age‘: 30, ‘score‘: [98, 97], ‘name‘: ‘Dong‘, ‘sex‘: ‘male‘}>>> del aDict>>> aDictTraceback (most recent call last):  File "<stdin>", line 1, in <module>NameError: name ‘aDict‘ is not defined
  • 字典对象的pop()和popitem()方法可以弹出并删除指定的元素
    >>> aDict = {‘age‘: 30, ‘score‘: [98, 97], ‘name‘: ‘Dong‘, ‘sex‘: ‘male‘, ‘adress‘: ‘SDIBT‘}>>> aDict.pop(‘name‘)       # 弹出指定键对应的值‘Dong‘>>> aDict{‘age‘: 30, ‘score‘: [98, 97], ‘sex‘: ‘male‘, ‘adress‘: ‘SDIBT‘}>>> aDict.popitem()         # 弹出一个元素(‘adress‘, ‘SDIBT‘)>>> aDict{‘age‘: 30, ‘score‘: [98, 97], ‘sex‘: ‘male‘}
标准库collections中与字典有关的类
  • OrderedDict类

    字典dict是无序的,如果需要一个可以记住元素插入顺序的字典,可以使用collections.OrderedDict

    >>> import collections>>> x = collections.OrderedDict()>>> x[‘a‘] = 3>>> x[‘b‘] = 5>>> x[‘c‘] = 8>>> xOrderedDict([(‘a‘, 3), (‘b‘, 5), (‘c‘, 8)])
  • defaultdict类

    字母出现频次统计问题,也可以使用collections模块的defaultdict类来实现

    >>> import string>>> import random>>> x = string.ascii_letters+string.digits+string.punctuation>>> z = ‘‘.join([random.choice(x) for i in range(100)])>>> from collections import defaultdict>>> frequences = defaultdict(int)     # 所有值默认为0>>> frequencesdefaultdict(<class ‘int‘>, {})>>> for item in z:...   frequences[item] += 1...>>> frequences.items()dict_items([(‘F‘, 1), (‘[‘, 2), (‘q‘, 1), (‘>‘, 2), (‘d‘, 5), (‘`‘, 1), (‘e‘, 2), (‘!‘, 3), (‘A‘, 1), (‘R‘, 1), (‘Z‘, 2), (‘V‘, 2), (‘g‘, 2), (‘n‘, 2), (‘2‘, 1), (‘w‘, 1), (‘|‘, 1), (‘v‘, 3), (‘c‘, 2), (‘u‘, 3), (‘&‘, 4), (‘m‘, 2), (‘S‘, 2), (‘,‘, 2), (‘@‘, 3), (‘$‘, 2), (‘{‘, 1), (‘j‘, 1), (‘\\‘, 1), (‘~‘, 1), (‘U‘, 1), (‘=‘, 1), (‘M‘, 4), (‘l‘, 1), (‘^‘, 1), (‘}‘, 1), (‘]‘, 2), (‘0‘, 1), (‘+‘, 2), (‘(‘, 1), (‘"‘, 1), (‘Q‘, 1), (‘4‘, 2), (‘.‘, 1), (‘x‘, 1), ("‘", 1), (‘<‘, 2), (‘/‘, 2), (‘;‘, 1), (‘E‘, 1), (‘)‘, 1), (‘o‘, 1), (‘P‘, 1), (‘W‘, 1), (‘B‘, 1), (‘K‘, 1), (‘8‘, 1), (‘_‘, 1), (‘N‘, 1), (‘h‘, 1), (‘7‘, 1), (‘I‘, 1), (‘G‘, 1), (‘*‘, 1), (‘y‘, 1)])

    创建defaultdict对象时,传递的参数表示字典中值的类型

    >>> from collections import defaultdict>>> games = defaultdict(list)>>> gamesdefaultdict(<class ‘list‘>, {})>>> games[‘name‘].append(‘dong‘)>>> games[‘name‘].append(‘zhang‘)>>> games[‘score‘].append(90)>>> games[‘score‘].append(93)>>> gamesdefaultdict(<class ‘list‘>, {‘name‘: [‘dong‘, ‘zhang‘], ‘score‘: [90, 93]})
  • Counter类

    对于词频统计的问题,使用collections模块的Counter类可以更加快速地实现这个功能,并且能够提供更多的功能,例如,查找出现次数最多的元素

    >>> import string>>> import random>>> x = string.ascii_letters+string.digits+string.punctuation>>> z = ‘‘.join([random.choice(x) for i in range(100)])>>> from collections import Counter>>> frequences = Counter(z)>>> frequences.items()dict_items([(‘H‘, 12), (‘%‘, 18), (‘K‘, 13), (‘A‘, 12), (‘\\‘, 6), (‘N‘, 11), (‘2‘, 14), (‘y‘, 13), (‘z‘, 12), (‘T‘, 10), (‘:‘, 8), (‘m‘, 8), ("‘", 11), (‘R‘, 12), (‘,‘, 10), (‘E‘, 7), (‘e‘, 16), (‘b‘, 10), (‘f‘, 16), (‘+‘, 8), (‘7‘, 15), (‘v‘, 9), (‘l‘, 15), (‘"‘, 9), (‘.‘, 12), (‘^‘, 20), (‘_‘, 16), (‘>‘, 7), (‘h‘, 12), (‘C‘, 12), (‘p‘, 13), (‘n‘, 8), (‘Y‘, 14), (‘L‘, 11), (‘O‘, 12), (‘{‘, 5), (‘3‘, 10), (‘)‘, 15), (‘}‘, 4), (‘|‘, 14), (‘a‘, 10), (‘@‘, 9), (‘w‘, 10), (‘B‘, 11), (‘6‘, 8), (‘Q‘, 11), (‘`‘, 10), (‘/‘, 8), (‘<‘, 5), (‘=‘, 12), (‘M‘, 12), (‘4‘, 6), (‘s‘, 18), (‘[‘, 7), (‘G‘, 12), (‘#‘, 16), (‘o‘, 13), (‘*‘, 8), (‘i‘, 16), (‘P‘, 12), (‘k‘, 17), (‘j‘, 4), (‘-‘, 15), (‘D‘, 4), (‘]‘, 6), (‘q‘, 16), (‘$‘, 17), (‘J‘, 15), (‘U‘, 14), (‘t‘, 11), (‘I‘, 11), (‘0‘, 7), (‘r‘, 12), (‘&‘, 6), (‘!‘, 12), (‘u‘, 10), (‘F‘, 9), (‘W‘, 6), (‘c‘, 11), (‘1‘, 8), (‘5‘, 6), (‘;‘, 5), (‘V‘, 12), (‘~‘, 10), (‘Z‘, 11), (‘d‘, 9), (‘9‘, 9), (‘X‘, 13), (‘8‘, 9), (‘?‘, 5), (‘S‘, 6), (‘x‘, 7), (‘(‘, 7), (‘g‘, 6)])>>> frequences.most_common(1)       # 返回出现次数最多的一个字符及其词频[(‘^‘, 20)]>>> frequences.most_common(3)[(‘^‘, 20), (‘%‘, 18), (‘s‘, 18)]>>> frequences.most_common(10)[(‘^‘, 20), (‘%‘, 18), (‘s‘, 18), (‘k‘, 17), (‘$‘, 17), (‘e‘, 16), (‘f‘, 16), (‘_‘, 16), (‘#‘, 16), (‘i‘, 16)]>>> z = ‘‘.join([random.choice(x) for i in range(10000)])>>> frequences = Counter(z)>>> frequences.most_common(10)[(‘O‘, 127), (‘c‘, 125), (‘5‘, 121), (‘-‘, 121), (‘\\‘, 121), ("‘", 120), (‘~‘, 118), (‘,‘, 118), (‘J‘, 118), (‘<‘, 117)]?>>> z = [1,2,3,4,1,‘a‘,‘v‘,‘wer‘,‘wer‘,‘wer‘,1]>>> frequences = Counter(z)>>> frequences.most_common(3)[(1, 3), (‘wer‘, 3), (2, 1)]

原文地址:https://www.cnblogs.com/zxbdboke/p/10480203.html

时间: 2024-10-02 23:43:34

Python序列结构--字典的相关文章

Python序列结构--集合

集合:元素之间不允许重复 集合属于Python无序可变序列,元素之间不允许重复 集合对象的创建与删除 直接将值赋值给变量即可创建一个集合 >>> a = {3,5}>>> type(a)<class 'set'> set()函数将列表.元组.字符串.range对象等其他可迭代对象转换为集合,如果原来的数据中存在重复元素,则转换为集合的时候只保留一个:如果原序列或迭代对象中有不可哈希的值,无法转换为集合,抛出异常 >>> a_set=set(

Python序列之字典 (dict)

字典是Python语言中唯一的映射类型.字典对象是可变的,它是一个容器类型,支持异构.任意嵌套. 创建字典 语法:{key1:val1,key2:val2,.....} dict1 = {} #创建空字典 dict2 = {'n1':'liush','n2':'spirit','n3':'tester'} 字典常用操作及实例展示 可以使用dir(dict)查看字典支持的操作方法 clear 功能:清空字典所有元素 语法:D.clear() -> None.  Remove all items f

简述Python语言的元组序列结构

序列是程序设计中经常用到的数据存储方式,几乎每一种程序设计语言都提供了表格数据结构,如C和Basic中的一维.多维数组等.Python语言提供的序列类型在所有程序设计语言中是最丰富,最灵活,也是功能最强大的. 序列是一系列连续值,它们通常是相关的,并且按一定顺序排列.Python中常用的序列结构有列表.元组等. 元组和列表类似,但属于不可变序列,元组一旦创建,用任何方法都不可以修改其元素. 元组的定义方式和列表相同,但定义时所有元素是放在一对圆括号"("和")"中,

Python的序列类型——字典

字典 字典dict,存储的元素是一种无序的键值对(K-V),字典的K值为任意不可变数据类型(如:字符串. 数字.元组),V值为任意数据类型.在计算机内部保存数据的时候是用哈希表表示的,列表不支持转化为 哈希表的原因是K是变化的(列表的可以增.删.改),而元组却可以用哈希表表示.由于它的无序性,使 得它不能像列表那样使用切片.但是我们能对字典的中的K—Y值进行更改.使用for循环时(不能使用while), 默认之只输出K值,不输出V值.当然,在字典中也提供了相应的内置函数弥补这个缺陷. 还有一点需

Python-数据结构-字典

1.什么是字典? 字典是一种通过名字引用值的数据结构,这种结构类型称之为映射,是Python中的唯一内建的映射类型. 2.为什么要用字典? 字典可以轻松的通过某个特定的词(键)查到其定义(值). 3.字典的创建 字典由多个键和其对应的值组成,键-值对又称为项.字典中键是唯一的,值不是唯一的. 字典由{}表示,键和值之间用:分隔,项之间由,分隔.例如: phonebook = {'Johny':'12344','Viga':'342122','Lily':'534252'} 4.字典的dict函数

Python序列应用知识回顾

Python序列应用 1.序列 序列是一块用于存放多个值的连续内存空间,并且按一定顺序排列.序列结构有列表.元组.集合.字典和字符串.Python对序列中列表.元组.字符串有索引.切片.相加和相乘操作,可以通过关键字in检查某个元素是否为序列的成员. (1)索引 序列中的每个元素都有一个编号被称为索引,通过索引可以访问序列中的任何元素.索引类似C语言数组中的下标从0开始表示第一个元素,依次递增,但索引可以为负数,例如:-1表示最后一个元素. (2)切片 切片是访问序列中元素的一种方法,可以访问一

python基础之字典及字符

python基础之字典及字符串处理 本节内容 字典介绍及内置方法 字符串处理 1.字典介绍及内置方法 字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据.python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的.可哈希表示key必须是不可变类型,如:数字.字符串.元组. 字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型.列表是有序的对象结合,字典是无序的对象集合.两者

Python基础系列----字典、基本语句

1.定义                                                                                               映射:通过名字来引用的数据结构.与前面说的数据结构不同,一个是通过下标的数字,一个是通过名称. 字典是python中唯一内建的映射类型.字典中的值并没有特殊的顺序,但都是存储在一个特定的键下.键可以是数字.字符甚至是元组. 字典由多个键及其对应的值构成的键-值对组成. 1 phonebook={'To

Python序列的切片操作与技巧

切片操作 对于具有序列结构的数据来说,切片操作的方法是:consequence[start_index: end_index: step]. start_index: 表示是第一个元素对象,正索引位置默认为0:负索引位置默认为 -len(consequence) end_index: 表示是最后一个元素对象,正索引位置默认为 len(consequence)-1:负索引位置默认为 -1. step: 表示取值的步长,默认为1,步长值不能为0. [注意]对于序列结构数据来说,索引和步长都具有正负两