个性化阅读
专注于IT技术分析

Python字典用法:权威指南

如果你刚刚开始使用Python, 并且想了解更多信息, 请参加srcmini的Python数据科学入门课程。

字典是一个可变的内置Python数据结构。它在本质上类似于列表, 集合和元组。但是, 它不是由数字序列索引的, 而是基于键索引的, 可以理解为关联数组。在抽象级别上, 它由一个具有关联值的键组成。在Python中, 字典表示哈希表的实现。

你可能想知道什么是钥匙?

好了, 如下图所示, 键是不可变的(不能更改)数据类型, 可以是字符串或数字。但是, 键不能是可变数据类型, 例如列表。键在字典中是唯一的, 并且不能在字典中重复, 如果多次使用, 则后续条目将覆盖先前的值。

Python字典用法:权威指南1

键与值连接, 因此创建了类似地图的结构。如果你有一秒钟的时间, 请从图片中删除键, 剩下的就是一个包含数字序列的数据结构。因此, 字典在每个位置都具有一个key:value对。

字典由一对大括号{}表示, 其中的括起来是键:用逗号分隔的值对。

让我们看一下字典的语法:dictionary = {” key_1″:” value_1″, ” key_2″:” value_2″, ” key_3″:” value_3″}#

唯一键

既然你已经知道字典中的键必须是唯一的, 那么让我们借助示例来了解它。

dictionary_unique = {"a": "alpha", "o": "omega", "g": "gamma"}

让我们打印出来。

print(dictionary_unique)
{'a': 'alpha', 'o': 'omega', 'g': 'gamma'}

太好了, 所以到目前为止, 一切都还不错。你可以打印第一个词典输出。现在, 让我们用新值重复键g, 看看会发生什么。

dictionary_unique = {"a": "alpha", "o": "omega", "g": "gamma", "g": "beta"}
print(dictionary_unique)
{'a': 'alpha', 'o': 'omega', 'g': 'beta'}

不出所料, 键g先前的值gamma被值beta覆盖。

不变键

现在, 让我们看看尝试将键定义为可变数据类型时会发生什么。

dictionary_immutable = {["a", "b", "c"]: "alpha", "o": "omega", "g": "gamma", "g": "beta"}
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-16-78a55d50cd65> in <module>
----> 1 dictionary_immutable = {["a", "b", "c"]: "alpha", "o": "omega", "g": "gamma", "g": "beta"}


TypeError: unhashable type: 'list'

从上面的输出中, 你可以观察到将字典的第一个键定义为列表会导致TypeError, 因为字典键必须是不可变的类型, 而list是可变的类型。

但是, 有一种解决方法, 就是将列表替换为元组, 因为元组是不可变的数据类型。

dictionary_immutable = {("a", "b", "c"): "alpha", "o": "omega", "g": "gamma", "g": "beta"}
dictionary_immutable
{('a', 'b', 'c'): 'alpha', 'o': 'omega', 'g': 'beta'}

访问键和值

由于你现在知道如何创建字典, 因此让我们学习从字典中访问键和值。要访问键值对, 可以使用.items()方法, 该方法将以键, 值元组对的形式返回dict_items列表。

dictionary_unique.items()
dict_items([('a', 'alpha'), ('o', 'omega'), ('g', 'beta')])

若要分别访问键和值, 可以在字典或.keys()和.values()方法上使用for循环。

for key, value in dictionary_unique.items():  #accessing keys
    print(key, end=', ')
a, o, g, 
for key, value in dictionary_unique.items():  #accessing values
    print(value, end=', ')
alpha, omega, beta, 
dictionary_unique.keys() #accessing keys without for loop
dict_keys(['a', 'o', 'g'])
dictionary_unique.values()  #accessing values without for loop
dict_values(['alpha', 'omega', 'beta'])

你甚至可以通过将键指定为字典的参数来访问值。

dictionary_unique['a']
'alpha'
dictionary_unique['g']
'beta'

嵌套词典

创建嵌套字典非常简单。在嵌套字典中, 你可以在字典中传入字典或简单地将其放入;字典作为值传递给主字典的键。

在这里, 你将在嵌套字典dictionary_nested内创建一个srcmini字典。

dictionary_nested = {"srcmini":{"Deep Learning": "Python", "Machine Learning": "Pandas"}, "linkedin":"jobs", "nvidia":"hardware"}
dictionary_nested
{'srcmini': {'Deep Learning': 'Python', 'Machine Learning': 'Pandas'}, 'linkedin': 'jobs', 'nvidia': 'hardware'}
dictionary_nested['srcmini']['Deep Learning']
'Python'
dictionary_nested['srcmini']['Machine Learning']
'Pandas'
dictionary_nested['linkedin']
'jobs'
dictionary_nested['nvidia']
'hardware'

字典理解

字典理解可用于根据任意键和值表达式创建字典。这是创建字典的一种简单明了的方法, 并且通常比循环实现的速度更快。

import time
t1 = time.time()
dict_comprehension = {i: i**3 for i in range(200000)}
print(time.time() - t1)
0.0897526741027832

让我们打印前十个键:dict_comprehension词典中的值对。为此, 你将从itertools内置包中导入islice并将n指定为要提取的多个键值对。

from itertools import islice

comp_10 = list(islice(dict_comprehension.items(), 10))
print(comp_10)
[(0, 0), (1, 1), (2, 8), (3, 27), (4, 64), (5, 125), (6, 216), (7, 343), (8, 512), (9, 729)]
import time
t1 = time.time()
dict_comprehension = dict()
for i in range(200000):
    dict_comprehension[i+1] = i**3
print(time.time() - t1)
0.10853934288024902

从上面的两种字典实现中可以看到, 以最小的裕量理解字典仍然是运行时间上的赢家。你会注意到, 随着不断增加range参数, 时间差也会增加。

词频

在这种情况下, 从一系列书面文本中, 一串文本(也称为语料库)使我们可以借助词典来创建词频。

corpus = 'learn all about the Python Dictionary and its potential. \
            You would also learn to create word frequency using the Dictionary'
word_freq = dict()
corpus_word = str(corpus).split()
for word in range(len(corpus_ref)):
    if corpus_word[word] not in word_freq:
        word_freq[corpus_word[word]] = 1

    else:
         word_freq[corpus_word[word]] += 1
word_freq
{'learn': 2, 'all': 1, 'about': 1, 'the': 2, 'Python': 1, 'Dictionary': 2, 'and': 1, 'its': 1, 'potential.': 1, 'You': 1, 'would': 1, 'also': 1, 'to': 1, 'create': 1, 'word': 1, 'frequency': 1, 'using': 1}

大!因此, 从上述输出中可以看到, 借助Python词典, 你可以从一串文本中获得单词计数或单词频率。

恭喜你完成了本教程。

请随时在下面的评论部分中提出与本教程相关的任何问题。

如果你刚刚开始使用Python, 并且想了解更多信息, 请参加srcmini的Python数据科学入门课程。

赞(0)
未经允许不得转载:srcmini » Python字典用法:权威指南

评论 抢沙发

评论前必须登录!