字典也是我们在做数据分析时经常用到的类型,之前小白有总结过DataFrame的遍历,这篇博文,小白整理了自己遍历字典时的几种方法。
众所周知,字典是键值对的组合,那么对字典的遍历就自然而然的包含了对键和值的遍历,下面依次介绍遍历键、值,键值三种情况的遍历。
首先,创建一个字典,以便下面的遍历。
dict = {
'小明':129,
'小兰':148,
'小红':89
}
1.遍历key
可以看到,这里对字典key值的遍历,有三种方法,其中第三种方法报错了,这是因为小白使用的是PY3版本,在python3中keys()的方法替代了iterkeys()方法,如果是用python2版本是可以的,不过小白建议掌握python3里的方法,毕竟python2之后用的会越来越少。
#function1
for key in dict:
print (key)
---------------结果---------------------
小明
小兰
小红
#function2
for key in dict.keys():
print (key)
---------------结果---------------------
小明
小兰
小红
#function3
for key in dict.iterkeys():
print (key)
---------------结果-----------------------
AttributeError Traceback (most recent call last)
<ipython-input-10-e1bc6c7e42fe> in <module>
1
2 #方法三
----> 3 for key in dict.iterkeys():
4 print (key)
AttributeError: 'dict' object has no attribute 'iterkeys'
2.遍历value
同样,第二种方式报错的原因是一样的,python3中去掉了第二种方式,以方法一来代替,这里遍历value时和遍历key不一样,这里没有像遍历key时的第一种方法了,遍历key的第一种方法,默认输出就是key
#function1
for value in dict.values():
print (value)
------------------------
129
148
89
#function2
for value in dict.itervalues():
print (value)
-----------------------------
AttributeError Traceback (most recent call last)
<ipython-input-12-92a1ef0f19df> in <module>
----> 1 for value in dict.itervalues():
2 print (value)
AttributeError: 'dict' object has no attribute 'itervalues'
3.同时遍历key和value
同时遍历的方法比较多,我们一一来看:
(1)首先看方法一和方法二,其实这两种方法是差不多的,只是加不加括号的区别,这个可以根据喜好来选择。
(2)然后看方法三,方法三使用简写的方式实现了对key和value的读取,形式上更加简便
(3)再看结合zip使用的两种方法,其实方法四更像方法一和二,只是多了一个zip操作,方法五更加像方法三,也是使用了zip函数
注意:另外,我们来看下关于key,value方式和kv方式的区别,在方法四和五时,小白输出了数据的类型,两种方式的区别就主要在于输出数据的数据类型,key,value方式输出的是值本身,数据是什么类型,结果就是什么类型,但是方法五输出的tuple类型。
#function1
for key,value in dict.items():
print ('key: ',key,'value: ',value)
------------------------
key: 小明 value: 129
key: 小兰 value: 148
key: 小红 value: 89
#function2
for (key,value) in dict.items():
print ('key: ',key,'value: ',value)
------------------------
key: 小明 value: 129
key: 小兰 value: 148
key: 小红 value: 89
#function3
for kv in dict.items():
print ('kv is : ',kv)
------------------------
kv is : ('小明', 129)
kv is : ('小兰', 148)
kv is : ('小红', 89)
----------------------结合zip使用---------------------
#function4
for key,value in zip(dict.keys(), dict.values()):
print ('key:',key,'value: ',value)
print('type key:',type(key),'type value:',type(value))
------------------------
key: 小明 value: 129
type key: <class 'str'> type value: <class 'int'>
key: 小兰 value: 148
type key: <class 'str'> type value: <class 'int'>
key: 小红 value: 89
type key: <class 'str'> type value: <class 'int'>
#function5
for kv in zip(dict.keys(), dict.values()):
print ('kv: ',kv)
print('type:',type(kv))
------------------------
kv: ('小明', 129)
type: <class 'tuple'>
kv: ('小兰', 148)
type: <class 'tuple'>
kv: ('小红', 89)
type: <class 'tuple'>
4.定义方法读取key和value
上面介绍了读取key和value的方法,那么,如果我们在一个项目中要对key和value读取,还是定义成方法来读取,输出结果,这样便于我们的调用以及后面的使用,如下:
#定义读key值的函数
def keys_function(dict):
keys = []
#读出key
for k in dict.keys():
keys.append(format(k))
return keys
#定义读出value
def values_function(dict):
values = []
for v in dict.values():
values.append(format(v))
return values
print('key:',keys_function(dict),'type:',type(keys_function(dict)))
------------结果--------------
key: ['小明', '小兰', '小红'] type: <class 'list'>
print('value:',values_function(dict),'type:',type(values_function(dict)))
------------结果--------------
value: ['129', '148', '89'] type: <class 'list'>