关于字典的若干问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40584718/article/details/86550314

万丈高楼从地起


  • 字典的创建.
  • 字典的相关属性,常用的有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}
{}
{}
{}
{}
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`循环即可
关于字典的先写这么多,有问题再补充

欢迎交流

猜你喜欢

转载自blog.csdn.net/qq_40584718/article/details/86550314