刚刚使用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
如果要判断字典中是否存在指定键值对,首先应判断字典中是否有对应的键。
而,判断字典是否包含指定的键,可以使用 in
或 not in
运算符。
a = {'数学': 95, '语文': 89, '英语': 90}
'数学' in a # 结果为:True
'物理' in a # 结果为:False
- 复制
dict.copy()
方法用于返回一个具有相同键值对的新字典
- 基本操作:删除
- 使用del 语句:
del dict['key']
,但是del 语句没有返回结果 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:相对复杂,此处不做介绍