前言:
而今小伙伴们对“python基础数据结构”可能比较看重,兄弟们都想要分析一些“python基础数据结构”的相关知识。那么小编在网摘上搜集了一些对于“python基础数据结构””的相关文章,希望同学们能喜欢,看官们一起来学习一下吧!Python 字典
字典 Python中最重要的内置数据结构。常见的名字是哈希映射(hash map)或相联数组(associative array)
##它是一种大小可变的键值对集,key和value都是python对象。
##创建字典的方式之一是:使用大括号({})并用冒号分隔key和value
In [136]: empty_dic
Out[136]: {}
In [137]: dic1 = {'a' : 1, 'b' : 2}
In [138]: dic1
Out[138]: {'a': 1, 'b': 2}
In [139]: dic2 ={1 : 'I', 2 : 'Love', 3 : 'You'}
In [140]: dic2
Out[140]: {1: 'I', 2: 'Love', 3: 'You'}
##访问、插入、设置元素的语法更列表和元组是一样的
In [145]: dic1
Out[145]: {'a': 1, 'b': 2}
##访问
In [146]: dic1['a']
Out[146]: 1
##设置 修改元素
In [147]: dic1['a'] = [1, 2, 3]
In [148]: dic1
Out[148]: {'a': [1, 2, 3], 'b': 2}
##插入元素
In [149]: dic1['c'] = [3]
In [150]: dic1
Out[150]: {'a': [1, 2, 3], 'b': 2, 'c': [3]}
##判断字典中是否存在某个键
In [151]: 'a' in dic1
Out[151]: True
In [152]: 'ac' in dic1
Out[152]: False
##使用del关键字或pop方法可以删除值
In [153]: dic1
Out[153]: {'a': [1, 2, 3], 'b': 2, 'c': [3]}
In [154]: del dic1['a']
In [155]: dic1
Out[155]: {'b': 2, 'c': [3]}
In [158]: v = dic1.pop('b')
In [159]: v
Out[159]: 2
In [160]: dic1
Out[160]: {'c': [3]}
##keys和values方法分别用法获取键和值的列表。虽然键值对没有特定的顺序,
##但这两个函数会以相同的顺序输出键和值
In [161]: dic2 ={1 : 'I', 2 : 'Love', 3 : 'You'}
In [162]: dic2.keys()
Out[162]: [1, 2, 3]
In [163]: dic2.values()
Out[163]: ['I', 'Love', 'You']
##利用update方法,一个字典可以被合并到另一个字典中去
In [164]: dic1
Out[164]: {'c': [3]}
In [166]: dic1.update({'b' : 'love', 'a' : 'she'})
In [167]: dic1
Out[167]: {'a': 'she', 'b': 'love', 'c': [3]}
##从序列类型创建字典
##从两个序列中的元素配对组成一个字典
##一般是这样做
In [168]: keys = ('a','ab', 'abc')
In [169]: values = ('a','ab', 'abc')
In [170]: keys = (1,2,3)
In [171]: mapping = {}
In [172]: for key, value in zip(keys, values):
...: mapping[key] = value
...:
In [173]: mapping
Out[173]: {1: 'a', 2: 'ab', 3: 'abc'}
##由于字典本质上就是一个二元元组集,所以我们完全可以
##用dict类型函数直接处理二元元组列表
In [180]: keys
Out[180]: (1, 2, 3)
In [181]: values
Out[181]: ('a', 'ab', 'abc')
In [183]: mapping = {}
In [184]: mapping = dict(zip(keys, values))
In [185]: mapping
Out[185]: {1: 'a', 2: 'ab', 3: 'abc'}
##dict的get()和pop()方法可以接受一个可供返回的默认值
In [185]: mapping
Out[185]: {1: 'a', 2: 'ab', 3: 'abc'}
In [187]: default_value = 'aaaaaa'
In [188]: value = mapping.get(2, default_value)
In [189]: value
Out[189]: 'ab'
In [190]: value = mapping.get(4, default_value)
In [191]: value
Out[191]: 'aaaaaa'
## 如果key不存在,则get默认返回None,而pop则会引发一个异常。
In [192]: value = mapping.get(4)
In [193]: value
##一般情况下,常常会将字典中的值处理成列表等类型
##eg:根据首字母对一组单词进行分类 最终产生一个有列表组成的字典
In [194]: words = ['apple', 'atom', 'bat', 'bar', 'book']
In [195]: by_letter = {}
In [197]: for word in words:
...: letter = word[0]
...: if letter not in by_letter:
...: by_letter[letter] = [word]
...: else:
...: by_letter[letter].append(word)
...:
In [198]: by_letter
Out[198]: {'a': ['apple', 'atom'], 'b': ['bat', 'bar', 'book']}
##字典的setdefault方法刚好能达到if-else模块内容
In [199]: words = ['apple', 'atom', 'bat', 'bar', 'book']
In [200]: by_letter = {}
In [201]: for word in words:
...: letter = word[0]
...: by_letter.setdefault(letter, []).append(word)
...:
In [202]: by_letter
Out[202]: {'a': ['apple', 'atom'], 'b': ['bat', 'bar', 'book']}
##内置的collections模块有一个叫做defaultdict的类,它可以使该过程更简单
##传入一个类型或函数(用于生成字典各插槽所使用的默认值)即可创建出一个defaultdict:
In [203]: from collections import defaultdict
In [204]: by_letter = defaultdict(list)
In [205]: words = ['apple', 'atom', 'bat', 'bar', 'book']
In [207]: for word in words:
...: by_letter[word[0]].append(word)
...:
In [208]: by_letter
Out[208]: defaultdict(list, {'a': ['apple', 'atom'], 'b': ['bat', 'bar', 'book']})
##difaultdict的初始化只需要一个可调用对象(例如各种函数),并不需要明确的类型
##故,如果想要将默认值设置为4,只需传入一个能够返回4的函数即可:
标签: #python基础数据结构