资讯专栏INFORMATION COLUMN

Python字典小结

BoYang / 2849人阅读

摘要:我们用函数,来简单快捷地创建这个字典输出结果与原先代码一致。示例代码如下版本为无序字典有序字典输出的结果为无序字典有序字典默认字典是内建类的一个子类,第一个参数为属性提供初始值,默认为。

  字典(dict)结构是Python中常用的数据结构,笔者结合自己的实际使用经验,对字典方面的相关知识做个小结,希望能对读者一些启发~

创建字典

  常见的字典创建方法就是先建立一个空字典,然后逐一添加键(key)和值(value),比如创建字典person={"name":"Tome", "age":22, "city":"Shanghai, "ID": "073569"},可以使用以下代码:

person = {}

person["name"] = "Tom"
person["age"] = 22
person["city"] = "Shanghai"
person["ID"] = "073569"

print(person)

输出结果为:

{"name": "Tom", "age": 22, "city": "Shanghai", "ID": "073569"}

这样的创建方式简单原始,代码不够简洁优雅。我们用zip函数,来简单快捷地创建这个字典:

attrs = ["name", "age", "city", "ID"]
values = ["Tom", 22, "Shanghai", "073569"]
person = dict(zip(attrs, values))

print(person)

输出结果与原先代码一致。

遍历字典

  在实际应用中,我们常常需要遍历字典,实现的方法可参考以下代码:

attrs = ["name", "age", "city", "ID"]
values = ["Tom", 22, "Shanghai", "073569"]
person = dict(zip(attrs, values))

for key, value in person.items():
    print("Key:%-6s, Value:%s"%(key, value))

输出结果为:

Key:name  , Value:Tom
Key:age   , Value:22
Key:city  , Value:Shanghai
Key:ID    , Value:073569
对调键值对

  在实际应用中,有时候我们需要查找字典中某个值(value)对应的键(key),遍历字典是一种选择,对调键值对是另一种选择。对调键值对的实现代码如下:

attrs = ["name", "age", "city", "ID"]
values = ["Tom", 22, "Shanghai", "073569"]
person = dict(zip(attrs, values))

print("对调前:")
print(person)

Person = {v:k for k,v in person.items()}

print("对调后:")
print(Person)

输出结果为:

对调前:
{"name": "Tom", "age": 22, "city": "Shanghai", "ID": "073569"}
对调后:
{"Tom": "name", 22: "age", "Shanghai": "city", "073569": "ID"}
有序字典OrderedDict

  Python中的字典是无序的,其取出来的键是无序的,因为它是按照hash来储存的。有时候,我们需要字典的条目(items)或键(keys)是有序储存的,这时候可以使用collections模块中的OrderedDict,它是一种有序的字典结构。
  示例代码如下(Python版本为3.5.2):

from collections import OrderedDict

d = {}
d["Tom"]="A"
d["Jack"]="B"
d["Leo"]="C"
d["Alex"]="D"
print("无序字典(dict):")
for k,v in d.items():
    print(k,v)

d1 = OrderedDict()
d1["Tom"]="A"
d1["Jack"]="B"
d1["Leo"]="C"
d1["Alex"]="D"
print("
有序字典(OrderedDict):")
for k,v in d1.items():
    print(k,v)

输出的结果为:

无序字典(dict):
Leo C
Jack B
Tom A
Alex D

有序字典(OrderedDict):
Tom A
Jack B
Leo C
Alex D
默认字典collections.defaultdict

  collections.defaultdict是Python内建dict类的一个子类,第一个参数为default_factory属性提供初始值,默认为None。它覆盖一个方法并添加一个可写实例变量。它的其他功能与dict相同,但会为一个不存在的键提供默认值,从而避免KeyError异常。
  我们以统计列表中单词的词频为例,展示collections.defaultdict的优势。
  一般情形下,我们统计列表中的单词词频代码为:

words = ["sun", "moon", "star", "star",
         "star", "moon", "sun", "star"]

freq_dict = {}
for word in words:
    if word not in freq_dict.keys():
        freq_dict[word] = 1
    else:
        freq_dict[word] += 1

for key, val in freq_dict.items():
    print(key, val)

输出结果如下:

sun 2
moon 2
star 4

  使用collections.defaultdict,代码可以优化:

from collections import defaultdict

words = ["sun", "moon", "star", "star",
         "star", "moon", "sun", "star"]

freq_dict = defaultdict(int)
for word in words:
    freq_dict[word] += 1

for key, val in freq_dict.items():
    print(key, val)

其它默认初始值可以为set,list,dict等。

注意:本人现已开通微信公众号: Python爬虫与算法(微信号为:easy_web_scrape), 欢迎大家关注哦~~

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44815.html

相关文章

  • csv文件与字典,列表等之间的转换小结Python

    摘要:本文针对前面利用所做的一次数据匹配实验,整理了其中的一些对于文件的读写操作和常用的数据结构如字典和列表之间的转换文件与列表之间的转换将列表转换为文件将嵌套字典的列表转换为文件将列表转换为文件最基本的转换,将列表中的元素逐行写入到文件中将嵌套 本文针对前面利用Python 所做的一次数据匹配实验,整理了其中的一些对于csv文件的读写操作和常用的Python数据结构(如字典和列表)之间的转...

    econi 评论0 收藏0
  • Python进阶:自定义对象实现切片功能

    摘要:以自定义字典为例仅作演示,不保证其它功能的完备性猫输出结果上例的关键点在于将字典的键值取出,并对键值的列表做切片处理,其妙处在于,不用担心索引越界和负数索引,将字典切片转换成了字典键值的切片,最终实现目的。 2018-12-31 更新声明:切片系列文章本是分三篇写成,现已合并成一篇。合并后,修正了一些严重的错误(如自定义序列切片的部分),还对行文结构与章节衔接做了大量改动。原系列的单篇...

    yangrd 评论0 收藏0
  • Python中使用谷歌Cloud Speech API将语音转换为文字(另一种方案)

    摘要:如果你有疑问,或许可以参考创建密钥使用谷歌将语音转换为文字。将其取出,得到字典。 在之前发布的使用谷歌Cloud Speech API将语音转换为文字一文中,我们实现了在控制台使用curl发送post请求,得到语音转文字的结果;而在Python中使用谷歌Cloud Speech API将语音转换为文字一文中,我们实现了安装Cloud Speech API客户端库,通过调用库函数得到语音...

    ethernet 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<