在本教程中,您将学习有关 Python 字典的所有知识; 如何创建,访问,添加,删除元素以及各种内置方法。
Python 字典是无序的项目集合。 字典的每个项目都有一个键值对。
字典被优化以在键已知时检索值。
创建 Python 字典
创建字典就像将项目放在用逗号分隔的大括号{}
中一样简单。
项具有key
和表示为一对的相应value
(键值)。
虽然值可以是任何数据类型并且可以重复,但是键必须是不可变类型(字符串,数字或元组具有不可变元素)并且必须是唯一的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<span class="pl-c"># empty dictionary</span> <span class="pl-s1">my_dict</span> <span class="pl-c1">=</span> {} <span class="pl-c"># dictionary with integer keys</span> <span class="pl-s1">my_dict</span> <span class="pl-c1">=</span> {<span class="pl-c1">1</span>: <span class="pl-s">'apple'</span>, <span class="pl-c1">2</span>: <span class="pl-s">'ball'</span>} <span class="pl-c"># dictionary with mixed keys</span> <span class="pl-s1">my_dict</span> <span class="pl-c1">=</span> {<span class="pl-s">'name'</span>: <span class="pl-s">'John'</span>, <span class="pl-c1">1</span>: [<span class="pl-c1">2</span>, <span class="pl-c1">4</span>, <span class="pl-c1">3</span>]} <span class="pl-c"># using dict()</span> <span class="pl-s1">my_dict</span> <span class="pl-c1">=</span> <span class="pl-en">dict</span>({<span class="pl-c1">1</span>:<span class="pl-s">'apple'</span>, <span class="pl-c1">2</span>:<span class="pl-s">'ball'</span>}) <span class="pl-c"># from sequence having each item as a pair</span> <span class="pl-s1">my_dict</span> <span class="pl-c1">=</span> <span class="pl-en">dict</span>([(<span class="pl-c1">1</span>,<span class="pl-s">'apple'</span>), (<span class="pl-c1">2</span>,<span class="pl-s">'ball'</span>)]) |
从上面可以看到,我们还可以使用内置的dict()
函数创建字典。
从字典访问元素
虽然索引与其他数据类型一起使用来访问值,但是字典使用keys
。 可以在方括号[]
内或get()
方法中使用键。
如果我们使用方括号[]
,则在字典中找不到键的情况下会抛出KeyError
。 另一方面,如果找不到键,则get()
方法返回None
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<span class="pl-c"># get vs [] for retrieving elements</span> <span class="pl-s1">my_dict</span> <span class="pl-c1">=</span> {<span class="pl-s">'name'</span>: <span class="pl-s">'Jack'</span>, <span class="pl-s">'age'</span>: <span class="pl-c1">26</span>} <span class="pl-c"># Output: Jack</span> <span class="pl-en">print</span>(<span class="pl-s1">my_dict</span>[<span class="pl-s">'name'</span>]) <span class="pl-c"># Output: 26</span> <span class="pl-en">print</span>(<span class="pl-s1">my_dict</span>.<span class="pl-en">get</span>(<span class="pl-s">'age'</span>)) <span class="pl-c"># Trying to access keys which doesn't exist throws error</span> <span class="pl-c"># Output None</span> <span class="pl-en">print</span>(<span class="pl-s1">my_dict</span>.<span class="pl-en">get</span>(<span class="pl-s">'address'</span>)) <span class="pl-c"># KeyError</span> <span class="pl-en">print</span>(<span class="pl-s1">my_dict</span>[<span class="pl-s">'address'</span>]) |
输出
1 2 3 4 5 6 7 |
<span class="pl-v">Jack</span> <span class="pl-c1">26</span> <span class="pl-c1">None</span> <span class="pl-v">Traceback</span> (<span class="pl-s1">most</span> <span class="pl-s1">recent</span> <span class="pl-s1">call</span> <span class="pl-s1">last</span>): <span class="pl-v">File</span> <span class="pl-s">"<string>"</span>, <span class="pl-s1">line</span> <span class="pl-c1">15</span>, <span class="pl-s1">in</span> <span class="pl-c1"><</span><span class="pl-s1">module</span><span class="pl-c1">></span> <span class="pl-en">print</span>(<span class="pl-s1">my_dict</span>[<span class="pl-s">'address'</span>]) <span class="pl-v">KeyError</span>: <span class="pl-s">'address'</span> |
更改和添加字典元素
字典是可变的。 我们可以使用赋值运算符添加新项或更改现有项的值。
如果键已经存在,那么现有值将被更新。 如果键不存在,则将新的键值对添加到字典中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<span class="pl-c"># Changing and adding Dictionary Elements</span> <span class="pl-s1">my_dict</span> <span class="pl-c1">=</span> {<span class="pl-s">'name'</span>: <span class="pl-s">'Jack'</span>, <span class="pl-s">'age'</span>: <span class="pl-c1">26</span>} <span class="pl-c"># update value</span> <span class="pl-s1">my_dict</span>[<span class="pl-s">'age'</span>] <span class="pl-c1">=</span> <span class="pl-c1">27</span> <span class="pl-c">#Output: {'age': 27, 'name': 'Jack'}</span> <span class="pl-en">print</span>(<span class="pl-s1">my_dict</span>) <span class="pl-c"># add item</span> <span class="pl-s1">my_dict</span>[<span class="pl-s">'address'</span>] <span class="pl-c1">=</span> <span class="pl-s">'Downtown'</span> <span class="pl-c"># Output: {'address': 'Downtown', 'age': 27, 'name': 'Jack'}</span> <span class="pl-en">print</span>(<span class="pl-s1">my_dict</span>) |
输出:
1 2 |
{<span class="pl-s">'name'</span>: <span class="pl-s">'Jack'</span>, <span class="pl-s">'age'</span>: <span class="pl-c1">27</span>} {<span class="pl-s">'name'</span>: <span class="pl-s">'Jack'</span>, <span class="pl-s">'age'</span>: <span class="pl-c1">27</span>, <span class="pl-s">'address'</span>: <span class="pl-s">'Downtown'</span>} |
从字典中删除元素
我们可以使用pop()
方法删除字典中的特定项目。 此方法删除提供了key
的项目并返回value
。
popitem()
方法可用于从字典中删除并返回任意的(key, value)
项目对。 使用clear()
方法可以一次删除所有项目。
我们还可以使用del
关键字删除单个项目或整个字典本身。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<span class="pl-c"># Removing elements from a dictionary</span> <span class="pl-c"># create a dictionary</span> <span class="pl-s1">squares</span> <span class="pl-c1">=</span> {<span class="pl-c1">1</span>: <span class="pl-c1">1</span>, <span class="pl-c1">2</span>: <span class="pl-c1">4</span>, <span class="pl-c1">3</span>: <span class="pl-c1">9</span>, <span class="pl-c1">4</span>: <span class="pl-c1">16</span>, <span class="pl-c1">5</span>: <span class="pl-c1">25</span>} <span class="pl-c"># remove a particular item, returns its value</span> <span class="pl-c"># Output: 16</span> <span class="pl-en">print</span>(<span class="pl-s1">squares</span>.<span class="pl-en">pop</span>(<span class="pl-c1">4</span>)) <span class="pl-c"># Output: {1: 1, 2: 4, 3: 9, 5: 25}</span> <span class="pl-en">print</span>(<span class="pl-s1">squares</span>) <span class="pl-c"># remove an arbitrary item, return (key,value)</span> <span class="pl-c"># Output: (5, 25)</span> <span class="pl-en">print</span>(<span class="pl-s1">squares</span>.<span class="pl-en">popitem</span>()) <span class="pl-c"># Output: {1: 1, 2: 4, 3: 9}</span> <span class="pl-en">print</span>(<span class="pl-s1">squares</span>) <span class="pl-c"># remove all items</span> <span class="pl-s1">squares</span>.<span class="pl-en">clear</span>() <span class="pl-c"># Output: {}</span> <span class="pl-en">print</span>(<span class="pl-s1">squares</span>) <span class="pl-c"># delete the dictionary itself</span> <span class="pl-k">del</span> <span class="pl-s1">squares</span> <span class="pl-c"># Throws Error</span> <span class="pl-en">print</span>(<span class="pl-s1">squares</span>) |
输出:
1 2 3 4 5 6 7 8 9 |
<span class="pl-c1">16</span> {<span class="pl-c1">1</span>: <span class="pl-c1">1</span>, <span class="pl-c1">2</span>: <span class="pl-c1">4</span>, <span class="pl-c1">3</span>: <span class="pl-c1">9</span>, <span class="pl-c1">5</span>: <span class="pl-c1">25</span>} (<span class="pl-c1">5</span>, <span class="pl-c1">25</span>) {<span class="pl-c1">1</span>: <span class="pl-c1">1</span>, <span class="pl-c1">2</span>: <span class="pl-c1">4</span>, <span class="pl-c1">3</span>: <span class="pl-c1">9</span>} {} <span class="pl-v">Traceback</span> (<span class="pl-s1">most</span> <span class="pl-s1">recent</span> <span class="pl-s1">call</span> <span class="pl-s1">last</span>): <span class="pl-v">File</span> <span class="pl-s">"<string>"</span>, <span class="pl-s1">line</span> <span class="pl-c1">30</span>, <span class="pl-s1">in</span> <span class="pl-c1"><</span><span class="pl-s1">module</span><span class="pl-c1">></span> <span class="pl-en">print</span>(<span class="pl-s1">squares</span>) <span class="pl-v">NameError</span>: <span class="pl-s1">name</span> <span class="pl-s">'squares'</span> <span class="pl-c1">is</span> <span class="pl-c1">not</span> <span class="pl-s1">defined</span> |
Python 字典方法
下表列出了字典可用的方法。 在上面的示例中已经使用了其中一些。
方法 | 描述 |
---|---|
clear() |
从字典中删除所有项目。 |
copy() |
返回字典的浅表副本。 |
fromkeys(seq[, v]) |
返回一个新字典,其中的键从seq 开始,其值等于v (默认为None )。 |
get(key [, d]) |
返回key 的值。 如果key 不存在,则返回d (默认为None )。 |
items() |
以(键,值)格式返回字典项的新对象。 |
keys() |
返回字典键的新对象。 |
pop(key [, d]) |
如果没有找到key ,则用key 删除该项目并返回其值或d 。 如果未提供d ,但未找到key ,则它将弹出KeyError 。 |
popitem() |
删除并返回任意项(键值)。 如果字典为空,则抛出KeyError 。 |
setdefault(key [, d]) |
如果key 在字典中,则返回相应的值。 如果不是,则插入key ,其值为d ,然后返回d (默认为None )。 |
update([other]) |
使用other 中的键/值对更新字典,覆盖现有键。 |
values() |
返回字典值的新对象 |
以下是这些方法的一些示例用例。
1 2 3 4 5 6 7 8 9 10 11 |
<span class="pl-c"># Dictionary Methods</span> <span class="pl-s1">marks</span> <span class="pl-c1">=</span> {}.<span class="pl-en">fromkeys</span>([<span class="pl-s">'Math'</span>, <span class="pl-s">'English'</span>, <span class="pl-s">'Science'</span>], <span class="pl-c1">0</span>) <span class="pl-c"># Output: {'English': 0, 'Math': 0, 'Science': 0}</span> <span class="pl-en">print</span>(<span class="pl-s1">marks</span>) <span class="pl-k">for</span> <span class="pl-s1">item</span> <span class="pl-c1">in</span> <span class="pl-s1">marks</span>.<span class="pl-en">items</span>(): <span class="pl-en">print</span>(<span class="pl-s1">item</span>) <span class="pl-c"># Output: ['English', 'Math', 'Science']</span> <span class="pl-en">print</span>(<span class="pl-en">list</span>(<span class="pl-en">sorted</span>(<span class="pl-s1">marks</span>.<span class="pl-en">keys</span>()))) |
输出:
1 2 3 4 5 |
{<span class="pl-s">'Math'</span>: <span class="pl-c1">0</span>, <span class="pl-s">'English'</span>: <span class="pl-c1">0</span>, <span class="pl-s">'Science'</span>: <span class="pl-c1">0</span>} (<span class="pl-s">'Math'</span>, <span class="pl-c1">0</span>) (<span class="pl-s">'English'</span>, <span class="pl-c1">0</span>) (<span class="pl-s">'Science'</span>, <span class="pl-c1">0</span>) [<span class="pl-s">'English'</span>, <span class="pl-s">'Math'</span>, <span class="pl-s">'Science'</span>] |
Python 字典推导式
字典推导式是一种用 Python 中的可迭代对象创建新字典的简洁明了方法。
字典推导式由一个表达式对(键值)和大括号{}
中的for
语句组成。
这是制作字典的示例,其中每个项目都是一对数字及其平方。
1 2 3 4 |
<span class="pl-c"># Dictionary Comprehension</span> <span class="pl-s1">squares</span> <span class="pl-c1">=</span> {<span class="pl-s1">x</span>: <span class="pl-s1">x</span><span class="pl-c1">*</span><span class="pl-s1">x</span> <span class="pl-k">for</span> <span class="pl-s1">x</span> <span class="pl-c1">in</span> <span class="pl-en">range</span>(<span class="pl-c1">6</span>)} <span class="pl-en">print</span>(<span class="pl-s1">squares</span>) |
输出:
1 |
{<span class="pl-c1">0</span>: <span class="pl-c1">0</span>, <span class="pl-c1">1</span>: <span class="pl-c1">1</span>, <span class="pl-c1">2</span>: <span class="pl-c1">4</span>, <span class="pl-c1">3</span>: <span class="pl-c1">9</span>, <span class="pl-c1">4</span>: <span class="pl-c1">16</span>, <span class="pl-c1">5</span>: <span class="pl-c1">25</span>} |
此代码等效于
1 2 3 4 |
<span class="pl-s1">squares</span> <span class="pl-c1">=</span> {} <span class="pl-k">for</span> <span class="pl-s1">x</span> <span class="pl-c1">in</span> <span class="pl-en">range</span>(<span class="pl-c1">6</span>): <span class="pl-s1">squares</span>[<span class="pl-s1">x</span>] <span class="pl-c1">=</span> <span class="pl-s1">x</span><span class="pl-c1">*</span><span class="pl-s1">x</span> <span class="pl-en">print</span>(<span class="pl-s1">squares</span>) |
输出:
1 |
{<span class="pl-c1">0</span>: <span class="pl-c1">0</span>, <span class="pl-c1">1</span>: <span class="pl-c1">1</span>, <span class="pl-c1">2</span>: <span class="pl-c1">4</span>, <span class="pl-c1">3</span>: <span class="pl-c1">9</span>, <span class="pl-c1">4</span>: <span class="pl-c1">16</span>, <span class="pl-c1">5</span>: <span class="pl-c1">25</span>} |
对于或语句,字典推导式可以可选地包含更多。
可选的if
语句可以过滤出项以形成新字典。
以下是一些仅包含奇数项的字典的示例。
1 2 3 4 |
<span class="pl-c"># Dictionary Comprehension with if conditional</span> <span class="pl-s1">odd_squares</span> <span class="pl-c1">=</span> {<span class="pl-s1">x</span>: <span class="pl-s1">x</span><span class="pl-c1">*</span><span class="pl-s1">x</span> <span class="pl-k">for</span> <span class="pl-s1">x</span> <span class="pl-c1">in</span> <span class="pl-en">range</span>(<span class="pl-c1">11</span>) <span class="pl-k">if</span> <span class="pl-s1">x</span> <span class="pl-c1">%</span> <span class="pl-c1">2</span> <span class="pl-c1">==</span> <span class="pl-c1">1</span>} <span class="pl-en">print</span>(<span class="pl-s1">odd_squares</span>) |
输出:
1 |
{<span class="pl-c1">1</span>: <span class="pl-c1">1</span>, <span class="pl-c1">3</span>: <span class="pl-c1">9</span>, <span class="pl-c1">5</span>: <span class="pl-c1">25</span>, <span class="pl-c1">7</span>: <span class="pl-c1">49</span>, <span class="pl-c1">9</span>: <span class="pl-c1">81</span>} |
要了解更多字典推导式,请访问 Python 字典推导式。
其他字典操作
典成员资格测试
我们可以使用关键字in
来测试key
是否在字典中。 请注意,成员资格测试仅适用于keys
,而不适用于values
。
1 2 3 4 5 6 7 8 9 10 11 12 |
<span class="pl-c"># Membership Test for Dictionary Keys</span> <span class="pl-s1">squares</span> <span class="pl-c1">=</span> {<span class="pl-c1">1</span>: <span class="pl-c1">1</span>, <span class="pl-c1">3</span>: <span class="pl-c1">9</span>, <span class="pl-c1">5</span>: <span class="pl-c1">25</span>, <span class="pl-c1">7</span>: <span class="pl-c1">49</span>, <span class="pl-c1">9</span>: <span class="pl-c1">81</span>} <span class="pl-c"># Output: True</span> <span class="pl-en">print</span>(<span class="pl-c1">1</span> <span class="pl-c1">in</span> <span class="pl-s1">squares</span>) <span class="pl-c"># Output: True</span> <span class="pl-en">print</span>(<span class="pl-c1">2</span> <span class="pl-c1">not</span> <span class="pl-c1">in</span> <span class="pl-s1">squares</span>) <span class="pl-c"># membership tests for key only not value</span> <span class="pl-c"># Output: False</span> <span class="pl-en">print</span>(<span class="pl-c1">49</span> <span class="pl-c1">in</span> <span class="pl-s1">squares</span>) |
输出:
1 2 3 |
<span class="pl-c1">True</span> <span class="pl-c1">True</span> <span class="pl-c1">False</span> |
遍历字典
我们可以使用for
循环遍历字典中的每个键。
1 2 3 4 |
<span class="pl-c"># Iterating through a Dictionary</span> <span class="pl-s1">squares</span> <span class="pl-c1">=</span> {<span class="pl-c1">1</span>: <span class="pl-c1">1</span>, <span class="pl-c1">3</span>: <span class="pl-c1">9</span>, <span class="pl-c1">5</span>: <span class="pl-c1">25</span>, <span class="pl-c1">7</span>: <span class="pl-c1">49</span>, <span class="pl-c1">9</span>: <span class="pl-c1">81</span>} <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">in</span> <span class="pl-s1">squares</span>: <span class="pl-en">print</span>(<span class="pl-s1">squares</span>[<span class="pl-s1">i</span>]) |
输出:
1 2 3 4 5 |
<span class="pl-c1">1</span> <span class="pl-c1">9</span> <span class="pl-c1">25</span> <span class="pl-c1">49</span> <span class="pl-c1">81</span> |
字典内置函数
诸如all()
,any()
,len()
,cmp()
,sorted()
等内置函数通常与字典一起使用以执行不同的任务。
函数 | 描述 |
---|---|
all() |
如果字典的所有键均为True (或者字典为空),则返回True 。 |
any() |
如果字典的任何键为真,则返回True 。 如果字典为空,则返回False 。 |
len() |
返回字典中的长度(项目数)。 |
cmp() |
比较两个字典的项目。 (在 Python 3 中不可用) |
sorted() |
返回字典中新排序的键列表。 |
以下是一些使用内置函数来处理字典的示例。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<span class="pl-c"># Dictionary Built-in Functions</span> <span class="pl-s1">squares</span> <span class="pl-c1">=</span> {<span class="pl-c1">0</span>: <span class="pl-c1">0</span>, <span class="pl-c1">1</span>: <span class="pl-c1">1</span>, <span class="pl-c1">3</span>: <span class="pl-c1">9</span>, <span class="pl-c1">5</span>: <span class="pl-c1">25</span>, <span class="pl-c1">7</span>: <span class="pl-c1">49</span>, <span class="pl-c1">9</span>: <span class="pl-c1">81</span>} <span class="pl-c"># Output: False</span> <span class="pl-en">print</span>(<span class="pl-en">all</span>(<span class="pl-s1">squares</span>)) <span class="pl-c"># Output: True</span> <span class="pl-en">print</span>(<span class="pl-en">any</span>(<span class="pl-s1">squares</span>)) <span class="pl-c"># Output: 6</span> <span class="pl-en">print</span>(<span class="pl-en">len</span>(<span class="pl-s1">squares</span>)) <span class="pl-c"># Output: [0, 1, 3, 5, 7, 9]</span> <span class="pl-en">print</span>(<span class="pl-en">sorted</span>(<span class="pl-s1">squares</span>)) |
输出:
1 2 3 4 |
<span class="pl-c1">False</span> <span class="pl-c1">True</span> <span class="pl-c1">6</span> [<span class="pl-c1">0</span>, <span class="pl-c1">1</span>, <span class="pl-c1">3</span>, <span class="pl-c1">5</span>, <span class="pl-c1">7</span>, <span class="pl-c1">9</span>] |