Python自学教程7:字典类型有什么用

字典是Python中的一个重要操作,如果字典玩得顺,很多其他的数据类型就可以一通百通。

Python字典的定义

字典使用一对大括号进行定义,键值对之间使用逗号隔开,键和值使用冒号分隔。

键必须是不可变类型,一般使用字符串,数字,和元组也可以但用的不多。

值可以是任意数据类型。

a&#xA0;=&#xA0;{}&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<br>b&#xA0;=&#xA0;{<br>&#xA0;&#xA0;&#xA0;&#xA0;<span class="hljs-string">'name'</span>:&#xA0;<span class="hljs-string">'&#x4E5D;&#x67C4;'</span>,<br>&#xA0;&#xA0;&#xA0;&#xA0;<span class="hljs-string">'age'</span>:&#xA0;<span class="hljs-number">18</span>,<br>&#xA0;&#xA0;&#xA0;&#xA0;<span class="hljs-string">'hobby'</span>:&#xA0;[<span class="hljs-string">'&#x8FD0;&#x52A8;'</span>,&#xA0;<span class="hljs-string">'meizi'</span>],<br>&#xA0;&#xA0;&#xA0;&#xA0;<span class="hljs-string">'friends'</span>:&#xA0;[<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;{<span class="hljs-string">'name'</span>:&#xA0;<span class="hljs-string">'&#x5218;&#x5FB7;&#x534E;'</span>},<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;{<span class="hljs-string">'name'</span>:&#xA0;<span class="hljs-string">'&#x5F20;&#x5B66;&#x53CB;'</span>}<br>&#xA0;&#xA0;&#xA0;&#xA0;]<br>}<br>print(type(a))<br>< <span class="hljs-class"><span class="hljs-keyword">class</span>&#xA0;'<span class="hljs-title">dict</span>'&#xA0;><br>>>>&#xA0;<span class="hljs-title">print</span><span class="hljs-params">(type<span class="hljs-params">(b)</span>)</span><br>< <span class="hljs-title">class&#xA0;'<span class="hljs-title">dict</span>'&#xA0;><br></ <span></ <span>

Python字典的常用操作

字典的基本操作分为:增、删、改、查。

  • “查” 主要是去获取列表的某一个元素或者是多个元素,通过索引和切片可以获取。
  • “增” 主要是对这个字典当中去添加一个新的元素。
  • “删” 主要指我们对字典当中的某元素进行删除。
  • “改”主要是这个对这个字典当中的元素去进行修改。

Python字典的查询

字典通过键作为索引来获取对应的值。

b&#xA0;=&#xA0;{<br>&#xA0;&#xA0;&#xA0;&#xA0;<span class="hljs-string">'name'</span>:&#xA0;<span class="hljs-string">'&#x5FC3;&#x84DD;'</span>,<br>&#xA0;&#xA0;&#xA0;&#xA0;<span class="hljs-string">'age'</span>:&#xA0;<span class="hljs-number">18</span>,<br>&#xA0;&#xA0;&#xA0;&#xA0;<span class="hljs-string">'hobby'</span>:&#xA0;[<span class="hljs-string">'&#x8FD0;&#x52A8;'</span>,&#xA0;<span class="hljs-string">'meizi'</span>],<br>&#xA0;&#xA0;&#xA0;&#xA0;<span class="hljs-string">'friends'</span>:&#xA0;[<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;{<span class="hljs-string">'name'</span>:&#xA0;<span class="hljs-string">'&#x5218;&#x5FB7;&#x534E;'</span>},<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;{<span class="hljs-string">'name'</span>:&#xA0;<span class="hljs-string">'&#x5F20;&#x5B66;&#x53CB;'</span>}<br>&#xA0;&#xA0;&#xA0;&#xA0;]<br>}<br>print(b[<span class="hljs-string">'name'</span>])<br><span class="hljs-string">'&#x5FC3;&#x84DD;'</span><br>print(b[<span class="hljs-string">'hobby'</span>][<span class="hljs-number">-1</span>])<br><span class="hljs-string">'meizi'</span>

这种方式很好的将键和值联系起来,就像查字典一样。

如果想判断某个 key 是不是已经存在,可以直接使用 in 来判断:

print(<span class="hljs-string">"name"</span>&#xA0;<span class="hljs-keyword">in</span>&#xA0;b)

关于 Python 字典的键,始终需要注意的是:

  • 键不能重复
  • 键必须可哈希,更直白一点,键必须是不可变数据类型

列表是可变的数据类型,所以不能作为字典的键。 同样的,字典,集合这一类的可变数据类型都不能作为字典的键。

元组是不可变的,可以作为字典的键。

同样的,字符串、整型、浮点数、布尔值都是不可变的,所以都可以作为字典的键。

既然字典的键不能重复,那值可以重复吗?

答案是可以的,字典的值几乎不会做任何限制,你可以存储任何的数据类型,任何的数据值。

不同的键对应相同的值,完全是合理的:

a&#xA0;=&#xA0;{<br>&#xA0;&#xA0;&#xA0;&#xA0;<span class="hljs-string">"my_name"</span>:&#xA0;<span class="hljs-string">"jiubing"</span>,<br>&#xA0;&#xA0;&#xA0;&#xA0;<span class="hljs-string">"your_name"</span>:&#xA0;<span class="hljs-string">"jiubing"</span><br>}

Python字典取值的几种方法

取值最经典对的方法是通过中括号取值。

d&#xA0;=&#xA0;{<span class="hljs-string">'name'</span>:&#xA0;<span class="hljs-string">'&#x4E5D;&#x67C4;'</span>,&#xA0;<span class="hljs-string">'age'</span>:&#xA0;<span class="hljs-number">18</span>}<br>d[<span class="hljs-string">"name"</span>]<br>&#x4E5D;&#x67C4;

但这种方式有个弊端,当取的 key 不存在时,会报错。 比如我取一个 hobby ,因为不存在,会触发 keyerror 错误。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'keyerror'
</module></stdin>

为了避免这种情况,我比较习惯用 get 方法,当 key 不存在的时候,可以指定一个默认值 None, 不会引发错误。

d&#xA0;=&#xA0;{<span class="hljs-string">'name'</span>:&#xA0;<span class="hljs-string">'&#x4E5D;&#x67C4;'</span>,&#xA0;<span class="hljs-string">'age'</span>:&#xA0;<span class="hljs-number">18</span>}<br>d.get(<span class="hljs-string">"hobby"</span>,&#xA0;<span class="hljs-literal">None</span>)

Python字典添加元素

字典添加元素和修改元素的语法是一样的。

如果键不存在,则添加元素。

d&#xA0;=&#xA0;{<span class="hljs-string">'name'</span>:<span class="hljs-string">'&#x4E5D;&#x67C4;'</span>}<br>d[<span class="hljs-string">'age'</span>]&#xA0;=&#xA0;<span class="hljs-number">18</span><br>print(d)<br>{<span class="hljs-string">'name'</span>:&#xA0;<span class="hljs-string">'&#x4E5D;&#x67C4;'</span>,&#xA0;<span class="hljs-string">'age'</span>:&#xA0;<span class="hljs-number">18</span>}

如果键存在则修改字典

d&#xA0;=&#xA0;{<span class="hljs-string">'name'</span>:&#xA0;<span class="hljs-string">'&#x4E5D;&#x67C4;'</span>}<br>d[<span class="hljs-string">'name'</span>]&#xA0;=&#xA0;<span class="hljs-string">'jiubing'</span><br>print(d)<br>{<span class="hljs-string">'name'</span>:&#xA0;<span class="hljs-string">'jiubing'</span>}

Python字典删除元素

  • pop(key[,d])

删除指定的键对应的值,并返回该值,如果键不存在则返回默认值 d,如果没有给定 d,则抛出异常

d&#xA0;=&#xA0;{<span class="hljs-string">'name'</span>:&#xA0;<span class="hljs-string">'jiubing'</span>,&#xA0;<span class="hljs-string">'age'</span>:&#xA0;<span class="hljs-number">18</span>}<br>d.pop(<span class="hljs-string">'age'</span>)<br><span class="hljs-number">18</span><br>print(d)<br>{<span class="hljs-string">'name'</span>:&#xA0;<span class="hljs-string">'jiubing'</span>}<br>d.pop(<span class="hljs-string">'age'</span>)<br>Traceback&#xA0;(most&#xA0;recent&#xA0;call&#xA0;last):<br>&#xA0;&#xA0;File&#xA0;<span class="hljs-string">"<stdin>"</stdin></span>,&#xA0;line&#xA0;<span class="hljs-number">1</span>,&#xA0;<span class="hljs-keyword">in</span>&#xA0;<module><br>KeyError:&#xA0;<span class="hljs-string">'age'</span><br>d.pop(<span class="hljs-string">'age'</span>,&#xA0;<span class="hljs-number">-1</span>)<br><span class="hljs-number">-1</span><br></module>
  • .popitem()

任意删除字典中的一个键值对,并以二元元组 (key,value)的形式返回

d&#xA0;=&#xA0;{<span class="hljs-string">'name'</span>:&#xA0;<span class="hljs-string">'jiubing'</span>,&#xA0;<span class="hljs-string">'age'</span>:&#xA0;<span class="hljs-number">18</span>}<br>d.popitem()<br>(<span class="hljs-string">'age'</span>,&#xA0;<span class="hljs-number">18</span>)

Python字典合并

还可以通过方法 .update(new_dict),将 new_dict合并

d&#xA0;=&#xA0;{<span class="hljs-string">'name'</span>:<span class="hljs-string">'&#x4E5D;&#x67C4;'</span>}<br>new&#xA0;=&#xA0;{<span class="hljs-string">'age'</span>:<span class="hljs-number">18</span>,&#xA0;<span class="hljs-string">'gender'</span>:<span class="hljs-string">'&#x7537;'</span>}<br>d.update(new)<br>print(d)<br>{<span class="hljs-string">'name'</span>:&#xA0;<span class="hljs-string">'&#x4E5D;&#x67C4;'</span>,&#xA0;<span class="hljs-string">'age'</span>:&#xA0;<span class="hljs-number">18</span>,&#xA0;<span class="hljs-string">'gender'</span>:&#xA0;<span class="hljs-string">'&#x7537;'</span>}

当有重复key的时候会覆盖

d.update({<span class="hljs-string">'gender'</span>:&#xA0;<span class="hljs-string">'&#x5973;'</span>,<span class="hljs-string">'height'</span>:&#xA0;<span class="hljs-number">170</span>})<br>print(d)<br>{<span class="hljs-string">'name'</span>:&#xA0;<span class="hljs-string">'xinlan'</span>,&#xA0;<span class="hljs-string">'age'</span>:&#xA0;<span class="hljs-number">18</span>,&#xA0;<span class="hljs-string">'gender'</span>:&#xA0;<span class="hljs-string">'&#x5973;'</span>,&#xA0;<span class="hljs-string">'height'</span>:&#xA0;<span class="hljs-number">170</span>}

Python字典遍历

遍历字典使用 for 循环语法,但是要注意要获取字典的 items() 方法, 通过 items() 可以同时得到键值对,element 是一个元组。

new&#xA0;=&#xA0;{<span class="hljs-string">'age'</span>:<span class="hljs-number">18</span>,&#xA0;<span class="hljs-string">'gender'</span>:<span class="hljs-string">'&#x7537;'</span>}<br><span class="hljs-keyword">for</span>&#xA0;element&#xA0;<span class="hljs-keyword">in</span>&#xA0;new.items():<br>&#xA0;&#xA0;&#xA0;&#xA0;<br>&#xA0;print(element)

如果一不小心把 items() 落掉了,则只能得到 key:

<span class="hljs-keyword">for</span>&#xA0;element&#xA0;<span class="hljs-keyword">in</span>&#xA0;new:<br>&#xA0;<br>&#xA0;print(element)

如果只想获取值,则加上 values(), 快来验证下吧。

for element in new.values():
    #element&#x53EA;&#x6709;value
    print(element)

Python字典排序

Python的 key, value 一般按照先添加,先展示的顺序展示。 如果想对字典排序,就要改变键值对的展示顺序。 下面是一种比较优雅的实现,但用了一些还没讲的内容。

可以为key参数值指定lambda表达式,代码如下:

y1&#xA0;=&#xA0;{k:&#xA0;v&#xA0;<span class="hljs-keyword">for</span>&#xA0;k,&#xA0;v&#xA0;<span class="hljs-keyword">in</span>&#xA0;sorted(x.items(),&#xA0;<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;key=<span class="hljs-keyword">lambda</span>&#xA0;item:&#xA0;item[<span class="hljs-number">1</span>])}&#xA0;<br>print(y1)&#xA0;<br><br>y2&#xA0;=&#xA0;{k:&#xA0;v&#xA0;<span class="hljs-keyword">for</span>&#xA0;k,&#xA0;v&#xA0;<span class="hljs-keyword">in</span>&#xA0;sorted(x.items(),&#xA0;<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;key=<span class="hljs-keyword">lambda</span>&#xA0;item:&#xA0;item[<span class="hljs-number">1</span>],&#xA0;reverse=<span class="hljs-literal">True</span>)}&#xA0;<br>print(y2)&#xA0;

这段代码使用了for-in表达式生成了字典,其中x是待排序的字典。items获取了key-value对。而lambda表达式的item就是当前的key-value对。item[0]表示key,item[1]表示value,所以使用item[1],就表示按value排序,而使用item[0],就是按key排序。

字典的操作是非常丰富的,除了上面讲的内容,还有一些进阶操作比如 setdefaultdict 、默认字典,排序字典,都还没涉及到,后面出专门的文章进行说明。

Original: https://www.cnblogs.com/heniu/p/16627448.html
Author: 和牛
Title: Python自学教程7:字典类型有什么用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/601458/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球