python3基础语法——对字典基本操作(创建/添加/修改/复制/取值/删除)

刚刚使用Python进行数据分析,分享一些概念和想法,希望可以大家一起讨论,如果理解或者表达有不准确的地方,请多多指点,不吝赐教,非常感谢~~

  • 字典是什么?
menu = {"oatmeal": 3, "avocado toast": 6, "carrot juice": 5, "blueberry muffin": 2}
subtotal_to_total = {20: 24, 10: 12, 5: 6, 15: 18}
person = {"name": "Shuri", "age": 18, "siblings": ["T'Chaka", "Ramonda"]}
1. key可以是字符串或者数字,但不可以是列表;value可以任意类型 
2. 字典dict最大的好处就是查找或插入的速度极快,并且不想列表list一样,随着key的增加越来越复杂。
3. 但是dict需要占用较大的内存空间,换句话说,字典dict是以空间换速度。
  • 基本操作:创建,添加,修改
# 可以创建空的字典
my_dict={}

# 可以添加一对键值
my_dict["new_key"] = "new_value"

# 可以添加多对键值对
my_dict.update({"pantry": 22, "guest room": 25, "patio": 34})

# 可以复写字典中已有的值
my_dict["patio"]=22		
my_dict.update({"pantry": 12, "guest room": 15})
  • 检查是否存在指定key

如果要判断字典中是否存在指定键值对,首先应判断字典中是否有对应的键。
而,判断字典是否包含指定的键,可以使用 innot in 运算符。

a = {'数学': 95, '语文': 89, '英语': 90}

'数学' in a				# 结果为:True
'物理' in a				# 结果为:False
  • 复制

dict.copy() 方法用于返回一个具有相同键值对的新字典

  • 基本操作:删除
  1. 使用del 语句:del dict['key'],但是del 语句没有返回结果
  2. dict.pop() 方法:获取指定 key 对应的 value,并删除这个键值对
a = {'数学': 95, '语文': 89, '英语': 90}

del a['语文']			# 没有返回结果,查看a的结果为 {'数学': 95, '英语': 90}	
a.pop("语文")			# KeyError: '语文'(因为已经没有key='语文'的键值对了)
a.pop("数学")			# 结果为:95
a						# 结果为:{'英语': 90}

需要注意的是:我们要避免key值不存在的情况,所以使用 dict.pop("key" , 指定的返回值)函数,如果键值不存在,还可以指定要返回的值

  • 基本操作:取值

1. 查看字典信息:所有条目/所有key值/所有value值

(1).items():查看字典中所有条目,返回可遍历的所有(key, value) 元组
(2).keys():查看字典中所有key值, 返回字典中所有的key值的迭代器
(3).values() :查看字典中所有value值,返回字典中所有的value值的迭代器

my_dict = {'Name': 'Runoob', 'Age': 7}

my_dict.items()			# 结果为:dict_items([('Name', 'Runoob'), ('Age', 7)])
my_dict.keys()				# 结果为:dict_keys(['Name', 'Age'])
my_dict.values()			# 结果为:dict_values(['Runoob', 7])
其中:迭代器中的元素没有index,所以不能单独取值;只打印查看或者遍历元素
如果想要对其进行index操作,要先将这个迭代器使用.list()方法**序列化**
# 对key值的迭代器进行了“序列化“后进行索引操作,但是对value的迭代器没有序列化操作,观察结果:报错

def add_ten(my_dict):
  list_key=list(my_dict.keys())     # 对key值的迭代器进行了“序列化“
  list_value=my_dict.values()			# 但是对value的迭代器没有序列化操作
  for i in range(len(list_key)):
    my_dict[list_key[i]]=list_value[i]+10			# 上面讲过的“对已有值的复写”
  return my_dictionary
  
TypeError: 'dict_values' object does not support indexing

2. 取字典中某个值:

(1)根据key,找对应的value:dict ["key"]

zodiac_elements = {"water": ["Cancer", "Scorpio", "Pisces"], 
"fire": ["Aries", "Leo", "Sagittarius"],
 "earth": ["Taurus", "Virgo", "Capricorn"], 
 "air":["Gemini", "Libra", "Aquarius"]}
print(zodiac_elements["energy"])

# 打印结果出错
Traceback (most recent call last):
  File "script.py", line 4, in <module>
    print(zodiac_elements["energy"])
KeyError: 'energy'

为了避免 KeyError , 我们可以检查当前需要被取value的key是否在字典中,我们还可以使用try/except,但是我们无法将可能被调用的每个键值都添加到 try/except 中,所以我们使用.get( 'key' , 指定的返回值)

dict.get ( ‘key’ , 指定的返回值):如果key值存在则返回对应的value;但是如果不存在,还可以指定要返回的值。

building_heights = {"Burj Khalifa": 828, "Shanghai Tower": 632, "Abraj Al Bait": 601, "Ping An": 599, "Lotte World Tower": 554.5, "One World Trade": 541.3}

building_heights.get("Shanghai Tower")			# 结果为632
building_heights.get('Shanghai Tower', 0)		# 结果为632
building_heights.get('Mt Olympus', 0)			# 结果为0

(2)根据value,找对应的key:相对复杂,此处不做介绍

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值