持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天,点击查看活动详情
dict
Python的字典就和java中的Map、go中的map一样,是一个键值对,目的是为了通过key快速找到value,而不用像列表一样只能遍历。
创建
创建空字典
if __name__ == '__main__':
emptyDirct = {}
print(emptyDirct)
使用内建函数创建字典
# 使用内建函数创建字典
dictCreate = dict(name="whf", age="18")
print(dictCreate["age"])
访问
# 访问字典里面的值
tinydict = {"唐诗": "第1-100页", "宋词": "第101-200页"}
print(tinydict["唐诗"])
没有会返回错误:
# 访问字典里面的值
tinydict = {"唐诗": "第1-100页", "宋词": "第101-200页"}
print(tinydict["清词"])
输出:
Traceback (most recent call last):
File "/Users/wanghaifeng/PycharmProjects/study/basic/dirct/DirectDemo.py", line 10, in <module>
print(tinydict["清词"])
KeyError: '清词'
修改字典
# 修改字典
tinydict = {"唐诗": "第1-100页", "宋词": "第101-200页"}
tinydict["唐诗"] = "第10-100页"
print(tinydict["唐诗"]
删除
# 删除某个键
tinydict = {"唐诗": "第1-100页", "宋词": "第101-200页"}
del tinydict["宋词"]
清空字典
# 清空
tinydict = {"唐诗": "第1-100页", "宋词": "第101-200页"}
tinydict.clear()
print(tinydict)
删除字典
# 删除字典
tinydict = {"唐诗": "第1-100页", "宋词": "第101-200页"}
del tinydict
print(tinydict)
输出:
Traceback (most recent call last):
File "/Users/wanghaifeng/PycharmProjects/study/basic/dirct/DirectDemo.py", line 33, in <module>
print(tinydict)
NameError: name 'tinydict' is not defined
键必须不可变
可以用数字、字符串、元组,而列表不行:
# 可以用数字、字符串、元组,而列表不行
tinydict = {['name']: 'whf'}
print(tinydict[['name']])
输出:
Traceback (most recent call last):
File "/Users/wanghaifeng/PycharmProjects/study/basic/dirct/DirectDemo.py", line 34, in <module>
tinydict = {['name']: 'whf'}
TypeError: unhashable type: 'list'
但是java可以:
public static void main(String[] args) {
Map<List, Integer> map = new HashMap<>();
ArrayList arrayList = new ArrayList();
map.put(arrayList, 1);
System.out.println(map.get(arrayList));
arrayList.add(1);
System.out.println(map.get(arrayList));
}
输出:
1
null
笔者觉得py的更合理,可变的hash也会变,所以后面就找不到了,没有意义。
set
集合是一个无序的不重复元素序列。
可以使用大括号{}或者set()函数创建集合,注意:创建一个空集合必须用set()而不是{},因为{}是用来创建一个空字典。
创建空集合
if __name__ == '__main__':
# 创建空集合
emptySet = set()
print(emptySet)
去重
# 去重展示
norepeat = {"whf", "hf", "whf"}
print(norepeat)
输出:
{'whf', 'hf'}
判断是否在集合内
# 查看是否存在
ordinarySet = {"whf", "hf"}
print("wf" in ordinarySet)
添加元素
# 添加元素
ordinarySet = {"whf", "hf"}
ordinarySet.add("wf")
print(ordinarySet)
如果已经存在则不进行任何操作。
update可以添加列表、元组、字典等:
# 添加元素
ordinarySet = {"whf", "hf"}
ordinarySet.update({"key": "value"})
ordinarySet.update([1, 2])
print(ordinarySet)
很明显,和java一样set是利用map的key保证不重复的。
移除元素
- 不存在会发现错误,remove:
# 移除元素,不存在会发现错误
thisset = set(("1", "2", "3"))
thisset.remove("1")
print(thisset)
thisset.remove("4")
输出:
{'2', '3'}
Traceback (most recent call last):
File "/Users/wanghaifeng/PycharmProjects/study/basic/set/SetDemo.py", line 29, in <module>
thisset.remove("4")
KeyError: '4'
- 不存在不会发生错误,discard:
# 移除元素,不存在会发现错误
thisset = set(("1", "2", "3"))
thisset.remove("1")
print(thisset)
thisset.discard("4")
输出:
{'3', '2'}
- 随机删除,pop:
# 随机删除
thisset = set(("1", "2", "3"))
x = thisset.pop()
print(x)
输出:
2
清空集合
# 清空集合
thisset = set(("1", "2", "3"))
thisset.clear()
print(thisset)
输出:
set()
判断是否在集合中存在
# 判断是否在集合中存在
thisset = set(("1", "2", "3"))
print(4 in thisset)
输出:
False