生信程序员Python全栈工程师

66、4-字典遍历、缺省字典、有序字典

2019-06-09  本文已影响3人  BeautifulSoulpy
人生最大的遗憾,不是你错过了多少人

我们一生中会遇见许多人,有些人教会我们爱、关心、陪伴,有些人则让我们感受什么是挫败、难过、受伤,但最终随着时间的流逝,大部分人都渐行渐远,最后留下的只剩我们自己。

曾经我们因为在意别人的感受,而让自己受伤;

曾经我们因为想要去讨好别人,却忽视自己真正想要的是什么;
曾经我们以为让所有人喜欢自己就是最棒的事情,最后才发现最不喜欢自己的人那个人,就是自己……

人生中最大的遗憾不是你错过了多少人,而是你不知道自己有多珍贵。

所以,人生的旅程也是我们不断寻找自己的旅程,当我们真正找到自己,建立起属于自己的自爱系统,就可以看到自我当下的转变。



-2-一个人真正的自由,就是为自己做出选择

罗伯特·班尼特说:“你的人生是你做出的所有选择的汇总。如果你能控制选择的过程,那么便能控制你人生的所有方面。通过对自己负责,你会获得自由。”

因此,一个人真正的自由,就是有能力为自己做出选择。选择喜欢的生活方式、选择欣赏的伴侣、选择热爱的工作……然后为自己的选择负责。

我们将会拥有怎样的生活,很大程度上取决于你自己想要拥有怎样的人生。如果你不给自己设限,年龄、外貌、性别……这些都不会打败你,你也将收获更为广阔的未来。

爱自己,是每个人天生都有的能力,只是我们需要练习才能学会。

用好字典的关键在于Key
字典不会用,基本就不会编程,字典非常重要;

1.字典中的元素访问--三种方式
  • d[key]
    key不存在返回KeyError ;
  • get(key[,default])
    key不存在返回缺省值,没有设置返回缺省值;
  • setdefault(key[,default])
    key不存在,添加KV对,value为default,没有设置返回缺省值;
2.字典的删除;
  • pop(key[key,default])
    key 存在,移除它,返回它的value;
    key不存在返回default ;
    default未设置,Key不存在则抛出KeyError异常;
  • popitem()
    移除并返回一个任意的键值对;
    字典为empty,抛出KeyError 异常;
  • clear()
    清空字典
3.字典的遍历

使用for key, value in dict.items()可以遍历整个字典。如果你只喜欢遍历键名或值,你可以只使用for key in dict.keys()或 for value in dict.values()。

# 1. 遍历 keys-value 
for key, value in d1.items():
    print("{}->{}".format(key, value))
for key, _ in d1.items():   #丢弃一项;
    print(key)

# 2. 遍历key
for key in d1.keys():
    print(key,type(key))     # str  / int  
for k in d:
  print(d[k])

# 3. 遍历value
for value in d1.values():
    print(value)

# 4. 遍历item,即kv对;
for item in d.items():
  print(item)
  print(item[0],item[1])

5. 通用写法:一般不会出现异常;
for k in d:    #  遍历输出的是字典的keys  ;
  print(d[k])

字典总结:
1. Python3中,字典keys\values\items 方法返回一个类似一个生成器的可迭代对象;不会把函数的返回结果复制到内存中;不会产生内存copy,节省内存空间;
d={}
type(d.items())    #  dict_items([])
2. Python2中,上面的方法返回一个新的列表,占据新的内存空间,所以Python2建议使用iterkeys、

3.用好字典的关键在于Key

3.1 字典循环移除元素——移除字典中值为字符串的一项
d=dict(a=1,b=2,c=3,d='str1')
print(d)
lst=[]
i=''
for k in d.keys():
    print(k)
    if isinstance(d[k],str):
        lst.append(k)
d.pop(lst[0])
d

循环内增加、删除value时不允许的;pop会在循环内报错;

for k in d:     # 增加元素; dictionary changed size during iteration;
    d['a00']=100 
4.缺省字典 collections.defaultdict([default_factory[,...]])

第一个参数时default_factory,缺省为None,它提供一个初始化的函数,当key不存在的时候,这个工厂函数来生成key对应的value

方法1:
import random
from collections import defaultdict

d=defaultdict(list)
for c in 'abcde':
    for i in range(random.randint(1,5)):
        if d[c] not in d:
            d[c]=[]
        d[c].append(i)
print(d)

方法2,3:
import random

d={}
for c in 'abcde':
    for i in range(random.randint(1,5)):
        if not d.get(c):     #  if c not in d.keys():
            d[c]=[]
        d[c].append(i)
print(d)
总结:
1.
import random
from collections import defaultdict

d=defaultdict(list)   
#等价于 d[c]=[]
if d[c] not in d:
    d[c]=[]

总结
1.缺省字典中很多源码都在用;
2.字典为空dict 时,append会报错;缺省字典相当于添加一个空list ;
5.有序字典 OrderedDict (3.6.3版本才出现的;Ipython不会显示;原生Python才行)

记录Key插入的顺序;

# 有序字典的创建;
from collections import OrderedDict
d1 = 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('\n有序字典(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
上一篇下一篇

猜你喜欢

热点阅读