龙空技术网

Python 字典以及字典方法 数据结构 详细介绍

优悠严选 217

前言:

而今小伙伴们对“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基础数据结构