Python 数据分析——Python基础(三)

前面已经学到,列表这种数据结构适合于将值组织到一个结构中,通过编号进行索引。当索引不太好使时,可以通过名字来引用需要的值。这种数据结构称为映射(mapping),类似 Java 中的 Map。而这章要将的字典(dict)是 Python 中唯一内建的映射类型。字典中的值存储在一个特定的键下,没有特定的顺序。其中,键可以是数字、字符串甚至元祖,但必须是不可变的对象。

字典的键值对包括在花括号{}中,键/值对用冒号 : 分割,而各个对用逗号分割。例如,dic = {key1 : value1, key2 : value2 }。

字典有什么用呢?

记得小学的时候刚开始学习查新华字典,那时的列表思维迟迟转变不过来,只懂得按照拼音的顺序一页页去翻,遇到不会拼音的字需要通过笔画去查时,就懵逼了。新华字典前面的目录就是一个字典,键值对存储了汉字和页面的关系,可以实现快速查找。

再比如,现在有一个人名的列表如下:

names = ['kyle','Zhangsan','Jacky','Tom','Andy','Sunday']

如果要创建一个可以存储这些人手机号码的小型数据库,应该如何做呢?
一是建立一个新的列表,如下:

phones = ['18956325427','18956325428','18956325429','18956325423','18956325422','18956325421']

然后,可以通过如下的方式查找Jacky的电话号码

phone = phones[names.index('Jacky')]
print(phone)

| 输出:18956325429

上面的做法可以实现需求,但是麻烦,两个列表的顺序需要一一对应,不实用。如果使用字典了?

phonebook = {'kyle':'18956325427','Zhangsan':'18956325428','Jacky':'18956325429','Tom':'18956325423'}
print(phonebook,type(phonebook))
print(phonebook['Jacky'])

| 输出:{‘kyle’: ‘18956325427’, ‘Zhangsan’: ‘18956325428’, ‘Jacky’: ‘18956325429’, ‘Tom’: ‘18956325423’} <class 'dict'>
    18956325429

dict函数

申明一个字典最简单的方式是手动书写申明,如上面的 phonebook。另一种方式是通过 dict 函数申明。
(1)通过关键字参数来创建字典

dic = dict(name='kyle',age='18',hobby=['read','running','other'])
print(dic)

| 输出:{‘name’: ‘kyle’, ‘age’: ‘18’, ‘hobby’: [‘read’, ‘running’, ‘other’]}

(2)通过其他映射(其他字典)或者序列生成 dict

#键值对元祖组成的序列
lst1 = [("name","kyle"),("phone","123")]
#键值对列表组成的序列
lst2 = [["name",'Tom'],["age",20]]
#键值对元祖嵌套列表组成的元祖
lst3=(("count",[1,2]),("money",[3,4]))
dic1 = dict(lst1)
dic2 = dict(lst2)
dic3 = dict(lst3)
print(dic1,dic2,dic3)
# 只有key,直接生成一个字典
keys = ["x", "y", "z"]
dic1 = dict.fromkeys(keys)             #值全部为空
dic2 = dict.fromkeys(keys, 'hello')    #初始化值 hello
print(dic1,dic2)

| 输出:{‘name’: ‘kyle’, ‘phone’: ‘123’} {‘name’: ‘Tom’, ‘age’: 20} {‘count’: [1, 2], ‘money’: [3, 4]}
    {‘x’: None, ‘y’: None, ‘z’: None} {‘x’: ‘hello’, ‘y’: ‘hello’, ‘z’: ‘hello’}

字典的基本操作

字典的基本行为在很多方面跟序列类似

dic = {'d1':1, 'd2':'hello', 'd3':[1,2,3], 'd4':{'a':1,'b':2}}
print(dic,len(dic))             # 字典中键值对的数量
dic['d5'] = 'xyz'               # 任意添加元素
dic['d4'] = '字典修改成字符串'  # 任意修改元素
print('d1在dic字典中','d1' in dic)#成员资格
del dic['d1']                   # 任意删除元素
print(dic)
print('删除后,d1不在dic字典中','d1' in dic)
dic.clear()                     # 清空词典所有条目
print(dic)
del dic                         # 删除词典
#print(dic)                     # 删除字典后再打印会抛错

| 输出:{‘d1’: 1, ‘d2’: ‘hello’, ‘d3’: [1, 2, 3], ‘d4’: {‘a’: 1, ‘b’: 2}}  4
    d1在dic字典中 True
    {‘d2’: ‘hello’, ‘d3’: [1, 2, 3], ‘d4’: ‘字典修改成字符串’, ‘d5’: ‘xyz’}
    删除后,d1不在dic字典中 False
    {}

#字典的格式化字符串(这样的字典的键只能是字符串)
phonebook = {'kyle':'18956325427','Zhangsan':'18956325428','Jacky':'18956325429','Tom':'18956325423'}
print('kyle\'s phone number is %(kyle)s.' % phonebook)
#等同于以下的操作
print("Jacky's phone number is %s." % phonebook['Jacky'])

| 输出:kyle’s phone number is 18956325427.
    Jacky’s phone number is 18956325429.

字典的方法

(1)元素访问及遍历的方法

dic = {'name':'shop', 'city':'shenzhen', 'infor':{'addr':'深南大道', 'num':6023}}
print(dic['city'])
# 对于嵌套字典,输出嵌套内容,通过重复指向来输出
print(dic['infor']['addr'])
print('****************')
# .get(key)方法:直接查看key的value,如果没有相应key则返回None,添加print参数可以多返回一个值
print(dic.get('name'))
print(dic.get('type',print('nothing')))
print('************************************************')
# .keys()方法:输出字典所有key,注意这里的输出内容格式是视图,可以用list()得到key的列表
print(dic.keys(),type(dic.keys()))
print(list(dic.keys()))
print('************************************************')
# .values()方法:输出字典所有values,原理同.keys()方法
print(dic.values(),type(dic.values()))
print(list(dic.values()))
print('************************************************')
# .items()方法:输出字典所有items(元素),原理同.keys()方法
print(dic.items(),type(dic.items()))
print(list(dic.items()))
print('************************************************')
# for 函数遍历
for key in dic.keys():
    print(key)
print('******')

for value in dic.values():
    print(value)
print('******')

for (k,v) in dic.items():
    print('key为 %s, value为 %s' %(k,v))
print('******')  

| 输出:
shenzhen
深南大道


shop
nothing
None


dict_keys([‘name’, ‘city’, ‘infor’]) <class 'dict_keys'>
[‘name’, ‘city’, ‘infor’]


dict_values([‘shop’, ‘shenzhen’, {‘addr’: ‘深南大道’, ‘num’: 6023}]) <class 'dict_values'>
[‘shop’, ‘shenzhen’, {‘addr’: ‘深南大道’, ‘num’: 6023}]


dict_items([(‘name’, ‘shop’), (‘city’, ‘shenzhen’), (‘infor’, {‘addr’: ‘深南大道’, ‘num’: 6023})]) <class 'dict_items'>
[(‘name’, ‘shop’), (‘city’, ‘shenzhen’), (‘infor’, {‘addr’: ‘深南大道’, ‘num’: 6023})]


name
city
infor


shop
shenzhen
{‘addr’: ‘深南大道’, ‘num’: 6023}


key为 name, value为 shop
key为 city, value为 shenzhen
key为 infor, value为 {‘addr’: ‘深南大道’, ‘num’: 6023}


(2)字典的其他方法

# dict.update()方法:更新/合并一个字典,把第二个字典合并到第一个字典,改变了第一个字典
dic1 = {"name":'kyle', "age":20}
dic2 = {"book":'python', "money":40}
dic1.update(dic2)
print(dic1,dic2)
print('****************************************************************')
# 和序列的原理一样,x和y指向同一个字典,所以会一起更新
x = {'name':'kyle' , 'age':20}
y = x
x.update({'money':4})
print(x,y)
print('****************************************************************')
#通过.copy()方法,复制一个新的字典(浅复制)
m = {'name':'Tom' , 'age':30,'book':['python','java','C++']}
n = m.copy()
m['name'] = 'kyle'
m.update({'money':50})
m['book'].remove('java')   # n中 book 的值也会改变
print(m,n)

| 输出:
{‘name’: ‘kyle’, ‘age’: 20, ‘book’: ‘python’, ‘money’: 40} {‘book’: ‘python’, ‘money’: 40}


{‘name’: ‘kyle’, ‘age’: 20, ‘money’: 4} {‘name’: ‘kyle’, ‘age’: 20, ‘money’: 4}


{‘name’: ‘kyle’, ‘age’: 30, ‘book’: [‘python’, ‘C++’], ‘money’: 50} {‘name’: ‘Tom’, ‘age’: 30, ‘book’: [‘python’, ‘C++’]}

顺便说下集合(set)

集合是没有顺序的简单对象的聚集。当在聚集中一个对象的存在比其顺序或者出现的次数重要时使用集合。

st = set(['shenzhen', 'shanghai', 'beijing'])
print(st,type(st))
print('beijing' in st)      #成员判断
print('hunan' in st)
st1 = st.copy()             #复制
st1.add('hunan')            #增加成员
print(st,st1)
print(st1.issuperset(st))   #是否包含
st1.remove('beijing')       #删除
print(st1.issuperset(st))   #是否包含
print(st & st1)             #交集

| 输出:
{‘beijing’, ‘shanghai’, ‘shenzhen’} <class 'set'>
True
False
{‘beijing’, ‘shanghai’, ‘shenzhen’} {‘beijing’, ‘hunan’, ‘shanghai’, ‘shenzhen’}
True
False
{‘shanghai’, ‘shenzhen’}

集合其实以后会用的比较少,这里是为了比较一下列表,字典,集合的定义方式
列表:[‘1’,‘2’,‘3’]
集合:{‘1’,‘2’,‘3’}
字典:{‘k’:‘1’,‘g’:2}

好了,今天的内容就是这些,下节开始进入语句的探讨 …

上一篇:Python 数据分析——Python基础(二)

  更到精彩,扫码关注
更到精彩,扫码关注

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值