首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 字典一些常见的魔法方法以及遇到的面试题

python 字典一些常见的魔法方法以及遇到的面试题

作者头像
用户4945346
发布2020-07-20 16:16:10
6680
发布2020-07-20 16:16:10
举报
文章被收录于专栏:pythonista的日常pythonista的日常

一、字典介绍

dict 类型不但在各种程序里广泛使用,它也是 Python 语言的基石。模块的命名空间、实例的属性和函数的关键字参数中都可以看到字典的身影。跟它有关的内置函数都在__builtins__.__dict__模块中。正是因为字典至关重要,Python 对它的实现做了高度优化,而散列表则是字典类型性能出众的根本原因。

常规字典相比,OrderDict 对象内部维护着一个根据键插入顺序排序的双向链表,新插入的元素会被放到链表的尾部,从而实现记住插入顺序的功能。不过,python3.7 版本之后,内置字典已经实现了一样的能力,并在 python3.8 版本提供了 reversed() 方法,因此,OrderDict 已经没什么存在的必要了.

二、常见的映射方法:

1.检查 k 是否在字典 d 中

d.__contains__(k)  

2.让字典 d 能用 d[k] 的形式返回键 k 对应的值

d.__getitem__(k)

3.当 __getitem__ 找不到对应键的时候,这个方法会被调用

d.__missing__(k)

4.获取字典的某个属性值

d.__getattribute__(*args, **kwargs)

5.若字典里有键k,则把它对应的值设置为 default,然后返回这个值;若无,则让 d[k] = default,然后返回default

d.setdefault(k,[default])

三、遇到的面试题

1.字典用属性访问方式访问元素,要使用dict[key]的方式获取value,如何实现通过”."的形式来访问字典元素?

class mydict(dict):

     def __getattr__(self, item):
          try:
               return self[item]
          except:
               raise AttributeError(item)
               
myd = mydict(a=1, b=2)
print(myd.a)
print(myd.c)

2.有一个字典,d1 = {“a”: (1,2,3), “b”: (4,6,6), “c”: (2,5,8)},value类型是个tuple,根据value值的第一个下标元素对字典进行倒序排序。d1排序后的结果是 [(‘b’, (4, 6, 6)), (‘c’, (2, 5, 8)), (‘a’, (1, 2, 3))]

d1 = {"a": (1,2,3), "b": (4,6,6), "c": (2,5,8)}
res = sorted(d1.items(), key=lambda x:x[1][0], reverse=True)
print(res)

3.有个列表里面包含多个字典,例如:

students = [
 {"name": "Stanley", "age": 22, "score": 92},
   {"name": "Peter", "age": 19, "score": 99},
     {"name": "Well", "age": 23, "score": 82},
    {"name": "Bob", "age": 20, "score": 88},
  {"name": "Lily", "age": 22, "score": 95}
  ]

对上面的数据进行排序,根据先按分数再按年龄进行倒序排序。

from operator import itemgetter
students_by_score_age = sorted(students, key=itemgetter("score", "age"), reverse=True)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 pythonista的日常 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档