关于字典的若干问题
万丈高楼从地起
- 字典的创建.
- 字典的相关属性,常用的有
keys(),items(),values,update(),copy(),
- 其他的可以通过
dir(dict_object)及其help(具体的函数)
(万能助手)
In [2]: A={'Name':'A',"Age":18,"sex":'man'}
In [3]: A
Out[3]: {'Name': 'A', 'Age': 18, 'sex': 'man'}
In [4]: B=dict(Name='A',age=18,sex='man')
In [5]: B
Out[5]: {'Name': 'A', 'age': 18, 'sex': 'man'}
- 关于键值的更新.
用dict_object.update()
来更新键值,如果字典中没有出现要添加的新键值对,它会直接扩充原有的字典;但是,如果原有的字典中,已经存在该键值对的键,只是键值不一样,就会用当前新的键值覆盖掉原来的。
有时候更新的结果是将键值相加,只需要遍历用来更新的字典的键值即可。
In [29]: B={'salary':20}
In [30]: A
Out[30]: {'Name': 'A', 'Age': 18, 'sex': 'man', 'salary': 36}
In [31]: for i in B.keys():
...: A[i]=A[i]+B[i]
...: print(A)
Out:
{'Name': 'A', 'Age': 18, 'sex': 'man', 'salary': 56}
- 在字典中关于
dict_object[keys()]和dict_object.get(keys())
的区别。
如果该字典中存在该键值,两种用法几乎是一样的,类似于列表的切片。但是如果没有该键值的时候:
dict_object[keys()]:会直接报错
dict_object.get(keys()):会输出None
案例:
In [34]: A['Age']
Out[34]: 18
In [35]: A['AGE']
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-35-2dad59583e49> in <module>()
----> 1 A['AGE']
KeyError: 'AGE'
In [36]: A.get('Age')
Out[36]: 18
In [37]: A.get('AGE')
In [38]: print(A.get('AGE'))
None
对于字典键值的两种不同取法的异常处理方式,
dict_object[keys()]:引入try-----except:异常处理
dict_object.get(keys()):会输入None,通过if判断语句
案例:
所有的键值:
In [49]: dict_keys=[i for i in A.keys()]#得到所有的键值
#.swapcase()交换大小写(大变小,小变大),扩充几个不在A里面的键
In [50]: dict_keys.extend([i.swapcase() for i in dict_keys])
In [51]: dict_keys
Out[51]: ['Name', 'Age', 'sex', 'salary', 'nAME', 'aGE', 'SEX', 'SALARY']
第一种处理方式:
In [52]: for i in dict_keys:
...: tmp={}
...: try:
...: tmp.update({i:A[i]})
...: except:
...: continue
...: print(tmp)
...:
{'Name': 'A'}
{'Age': 18}
{'sex': 'man'}
{'salary': 56}
第二种处理:
In [56]: for i in dict_keys:
...: Tmp={}
...: if A.get(i)!=None:
...: Tmp.update({i:{A[i]}})
...: else:
...: break
...: print(Tmp)
...:
...:
...:
...:
Out[56]:
{'Name': {'A'}}
{'Age': {18}}
{'sex': {'man'}}
{'salary': {56}}
如果不加else:处出现"{}".
In [57]: for i in dict_keys:
...: Tmp={}
...: if A.get(i)!=None:
...: Tmp.update({i:A[i]})
...: print(Tmp)
...:
Out[57]:
{'Name': 'A'}
{'Age': 18}
{'sex': 'man'}
{'salary': 56}
{}
{}
{}
{}
- 关于
dict_object.fromkeys()
.可以用来批量添加新键,但是新的键值批量添加有点麻烦有人通过for循环和append实现。
def fromkeys(*args, **kwargs): # 将所有key都赋予相同的值,第一参数为key,第二个参数为value,如果没有第二个参数则默认为none;
键可以批量添加.
In [58]: A
Out[58]: ['A', 'B', 'C', 'D', 'E', 'E']
In [59]: D={}
In [60]: D.fromkeys(A)
Out[60]: {'A': None, 'B': None, 'C': None, 'D': None, 'E': None}
键值貌似不可以批量添加。
In [61]: D.fromkeys(A,list(range(5)))
Out[62]:
{'A': [0, 1, 2, 3, 4],
'B': [0, 1, 2, 3, 4],
'C': [0, 1, 2, 3, 4],
'D': [0, 1, 2, 3, 4],
'E': [0, 1, 2, 3, 4]}
可以通过下面的方式尝试批量实现键和键值的添加。
In [58]: A=list('A B C D E E'.split())
In [59]: [{}.fromkeys(j,i) for i,j in enumerate(A)]
Out[93]: [{'A': 0}, {'B': 1}, {'C': 2}, {'D': 3}, {'E': 4}, {'E': 5}]
#结果要是还想是字典,只需要定义一个空字典,然后`for`循环即可