惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

云风的 BLOG
云风的 BLOG
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
博客园 - 三生石上(FineUI控件)
T
The Blog of Author Tim Ferriss
宝玉的分享
宝玉的分享
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
V
Visual Studio Blog
小众软件
小众软件
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
MongoDB | Blog
MongoDB | Blog
V
V2EX
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 【当耐特】
Microsoft Azure Blog
Microsoft Azure Blog
The Cloudflare Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Engineering at Meta
Engineering at Meta
L
LangChain Blog
Martin Fowler
Martin Fowler
GbyAI
GbyAI
博客园 - 司徒正美

Posts on WKLKEN THINKING

apisix 中的 lrucache apisix 中的服务发现机制 apisix 中的负载均衡 apisix etcd机制 聊聊框架 关于 k8s 的 zero downtime deployment 一些建议 apisix 遇到的一些问题 关于在除夕前一天换了一个洗衣机的故事 Django DRF 性能优化 DRF 的一些实践 Part1: Serializer DRF继承关系图 Better Code: 关于接口的灵活性 新的仓库: wklken/naming 缓存使用的一些经验 Better Code: 抽象: 可扩展性与可维护性的抉择 Better Code: 异常时, 该提示用户哪些信息? Better Code: 更好的异常日志打印 Go: some libs Go: go-redis/cache升级的坑 Go: logrus性能提升 Go: gin validation 远程办公的一点总结 Go: 开发过程中的一些bug 项目管理实践: 风险驱动开发 Go: 一种error wrap调用链处理方式 漫谈技术选型 Go: 基于 apitest 做handler层单元测试 Go: go-sql-driver interpolateparams参数优化 [分享]深度工作 你需要更多的思考时间
Python-基础-字典小结
2013-03-09 · via Posts on WKLKEN THINKING

##字典

###定义 dictionary

1.键值对的集合(map)

2.字典是以大括号“{}”包围的数据集合

3.字典是无序的,在字典中通过键来访问成员。 可变的,可嵌套,可以原处修改扩展等,不产生新的字典

4.字典的键,可以是字符串(大小写敏感),数字常量或元组(不可变类型),同一个字典的键可以混用类型。字典的键必须是可哈希的

元组作为键的条件是,元组内的值都是不可变类型

  a = (1,2)  #可以作为键
  b = (1,2,[3,4])  #不可以

5.字典的值可以是任意类型,可以嵌套,可以自由修改

###声明

创建字典的几种方式:

1.基本

:::python
d = {} #空字典
d = {'name':'tom', 'age':22}
#等价
d = {}
d['name'] = 'tom'
d['age'] = 22

2.dict

:::python
d = dict() #空
d = dict(name='tom', age=22)

d = dict([('name','tom'), ('age',22)])
#等价
keys = ['name','age']
values = ['tom', 22]
d = dict(zip(keys,values))

3.fromkeys

不指定default_value的话,默认None

>>> dict.fromkeys(['name','age'],'default_value')
{'age': 'default_value', 'name': 'default_value'}

###基本操作 0.获取帮助

:::python
help(dict)

1.判定键是否存在于字典中

:::python
if k in d:   #k not in
    dosomething()

2.读取

:::python
d = {'a':1, 'b':2}

print d['a']  #得到1,但是若键不存在,将引发异常KeyError。慎用,建议不使用

print d.get('c', 3) #得到3,get方法,若是键不存在,返回第二个参数default_value.若是没有设default_value返回None

处理missing-key错误三种方式,根据具体需要

:::python
if k in d:
    print d[k]

try:
    print d[k]
except KeyError:
    dosomething()

print d.get(k, default)
#等价 d[k] if k in d else default

3.遍历

方式1:

:::python
for key in d:
    print key, d[key]
#等价 for key in d.keys()

方式2:

:::python
for key,value in d.items():
    print key, value

4.修改 方式1:某个键值对

:::python
d['key'] = 'newvalue'

方式2:批量添加或更新

:::python
#另一个字典
d.update({'key':'newvalue'})  #这里支持一整组值

#元组列表
d.update( [ ('a',1), ('b',2) ] ) #每个元组两个元素,(key,value)

#**key
d.update(c=3, e=4)

5.删除

:::python
del d['key']
value = d.pop('key') #删除并返回值
d.clear() #清空

6.其他:

len(d)   #长度
d.keys()  #key列表
d.values()  #value列表
d.items()   #(key, value) 列表
c = d.copy()   #浅拷贝
#返回迭代器,节省内存
d.iterkeys()
d.itervalues()
d.iteritems()
d.setdefault('name', 'ken') #若原来没有,设置,否则原值不变

###其他

1.字典排序 按照key排序

:::python
keys = d.keys()
keys.sort()
for key in keys:
    print d.get(key)

按照value进行排序

:::python
sorted(d.items(), lambda x,y: cmp(x[1],y[1]))

另外:

:::python
#假设d为字典
sorted(d)  #返回同 sorted(d.keys()),返回的是key排序

补充 2013-08-31

最快的字典排序方式(性能考虑,来自互联网)

>>> d = {'a':2, 'b':23, 'c':5, 'd':17, 'e':1}
>>> from operator import itemgetter
>>> sorted(d.iteritems(), key=itemgetter(1), reverse=True)
[('b', 23), ('d', 17), ('c', 5), ('a', 2), ('e', 1)]

2.自定义对象作为key

必须:

:::python
def __hash__(self):
    pass
def __eq__(self, other):
    pass

3.字典拷贝 浅拷贝:

:::python
c = d.copy() #

深拷贝必须用copy模块

:::python
form copy import deepcopy
c = deepcopy(d)

4.一种使用场景 假设有一个很大的列表l,假设10w条记录

有一个小列表b,要判断b中元素是否在l中

如果:

:::python
for i in b:
    if i in l:
        dosomething()

你会发现非常非常慢…因为第二个in语句,会遍历10w条….

改进:

:::python
d = dict.fromkeys(l)
for i in b:
    if i in d:
        dosomething()
#空间换时间,O(n) -> O(1)

5.利用dict进行函数switch

函数调用的switch(2013-09-01)

:::python
def a():
    print "a"
def b():
    print "b"
def default():
    print "default"
apply({1:a, 2:b}.get(x, default))

The end!

To be continue

wklken

Email: wklken@yeah.net

Blog: http://blog.csdn.net/wklken

2013-03-09

转载请注明出处,谢谢