字典与集合

字典特徵

字典和阵列类似,也是可变序列,但它是无序的,保存的内容是以「键:值」的形式存放的。
键是唯一的,但值可以有很多个。

特徵如下:

  1. 透过键而不是透过所引来读取
  2. 无序
  3. 可变,可任意嵌套
  4. 键必须唯一
  5. 键不可变

字典的新增

  • 定义字典时,每个元素都包含两个部分--键、值,两者使用「:」隔开,所有元素都放在一个大括号中

  • 创建空字典

# 有两种方法
name = {}
name = dict()
  • 也可以使用zip()函数
# name = dict(zip(list1, list2))

name = ['rex', 'xia', 'zhan']
sign = ['up', 'down', '5566']
test = dict(zip(name, sign))
print(test)
# {'rex': 'up', 'xia': 'down', 'zhan': '5566'}
  • 透过给定的键值创键字典
name = dict(id = "12345", email = "rex@gmail")
print(name)
# {'id': '12345', 'email': 'rex@gmail'}
  • 也可以使用fromkeys()创建空字典
name = ['xia', 'rex']
test = dict.fromkeys(name)
print(test)
# {'xia': None, 'rex': None}
  • 也可以使用已经存在的元组和阵列创建字典
# 元组:阵列、阵列:元组、元组:元组

name = ['xia', 'rex']
test = ('1', '2')
# (1)
dict1 = {test : name}
print(dict1)
# {('1', '2'): ['xia', 'rex']}

# (2)
dict2 = {name : test}
print(dict2)
# Traceback (most recent call last):
  #File "C:\Users\a9132\Desktop\python\1.py", line 3, in <module>
    #dict2 = {name : test}
#TypeError: unhashable type: 'list'

# (3)
dict3 = {test : test}
print(dict3)
# {('1', '2'): ('1', '2')}

删除字典

dict_example = {'2':'3', '4','5'}
del dict_example

# 将字典内部清空
dict_example.clear()

当然还有pop()、popitem()等方法。这边可以自己试一下
dict.pop(keyword)
dict.popitem() 直接删除末尾的key-value

字典搜索

  • 直接搜寻
name = {"1":"2", "3":"4"}
print(name["1"])
# 2
  • 但实际在处理的时候,不一定会知道当前有什麽键......,比如可以这样写
name = {"1":"2", "3":"4"}
print(name["5"] if "5" in name else "查无此键")
# 查无此键
  • 使用get()得到value
name = {"1" : "2", "3" : "4"}
get_value = name.get("1")
print(get_value)
# 2

none_keyword = name.get("5", "没有此key值")
print(none_keyword)
# 没有此key值

在使用get()的时候,如果没有找key,也就是key不存在的时候,得到的结果就是默认值

遍历字典

# 需要用dict.items()函式获得字典的键值对列表

name = {"1" : "2", "3" : "4"}
for item in name.items():
    print(item)
# ('1', '2')
# ('3', '4')
  • 如果想要获取具体的每个键和值......
name = {"1" : "2", "3" : "4", "5" : "6"}
for key, value in name.items():
    print(key, " 的下一个是 ", value)
# 1  的下一个是  2
# 3  的下一个是  4
# 5  的下一个是  6

这边也提供了values()、keys(),用於返回值、键

keys()会返回 ["键值", "键", ......]
values()回返回 dict_values(["值", "值", ......])

添加字典元素

  • 因为字典是可变序列,所以可以随时增加键-值对
name = {"1" : "2", "3" : "4", "5" : "6"}
name['7'] = '8'
print(name)
# {'1': '2', '3': '4', '5': '6', '7': '8'}

修改字典元素

name = {"1" : "2", "3" : "4", "5" : "6"}
name["1"] = '0'
print(name)
# {'1': '0', '3': '4', '5': '6'}

删除字典元素

name = {"1" : "2", "3" : "4", "5" : "6"}
del name['1']
print(name)
# {'3': '4', '5': '6'}

字典生成式

  • 可快速生成字典
import random

randdict = {i : random.randint(0, 100) for i in range(1, 5)}
print(randdict)
# {1: 35, 2: 88, 3: 38, 4: 77}

集合介绍

集合分为两种,可变集合、不可变集合,本文已可变集合为主,也就是set函数的应用

创建集合

  • 直接用 {} 创建
name = {1, 2, 3, 6, 5, 0}
print(name)
# {0, 1, 2, 3, 5, 6}

set()是无序的,所以每次输出的排序可能不同,不用在意

  • 使用set()函数建立
# setname = set(iteration)

name = set([1, 1, 2, 3, 4, 4])
print(name)
# {1, 2, 3, 4}

当出现重复元素时,会刷掉

往集合里添加元素

  • 使用add()函数
name = set([0, 1, 2, 3])
name.add(4)
print(name)
# {0, 1, 2, 3, 4}

在集合里删除元素

  • 范例
name = set([0, 1, 2, 3, 4, 5])
name.remove(0)
print(name)
# {1, 2, 3, 4, 5}

name.pop()
print(name)
# {2, 3, 4, 5}

name.clear()
print(name)
# set()

使用交集、合集、差集运算

交集使用「&」
合集使用「|」
差集使用「-」
对称差集使用「^」

  • 范例
name = set([0, 1, 2, 3])
example = set([0, 2, 3, 7])

print("交集: ", name & example)
# 交集:  {0, 2, 3}

print("合集: ", name | example)
# 合集:  {0, 1, 2, 3, 7}

print("差集: ", name - example)
# 差集:  {1}

<<:  【Day7】试着用JSX在页面上渲染出Table吧٩(๑❛ᴗ❛๑)۶

>>:  [GAS] Genero GAS 控制台网页版 (3.20後套件提供)

Day 15 JavaScript NodeList vs HTMLCollection

NodeList 与 HTMLCollection 的主要差异点是节点的类型不一样: NodeLi...

【31】30天在Colab尝试的30个影像分类训练实验 - 完赛心得

比赛动机 这是我第三次参加铁人赛,每次参赛都刚好隔一年,後来我发现这样的间隔其实很刚好,因为在中间的...

Day 16:自动补全!coc.nvim

一个好的自动补全工具可以让你工作效率翻倍,你不用再去查文件了,自动补全不仅可以告诉你这里有什麽函数可...

Spring Framework X Kotlin Day 21 WebSocket

GitHub Repo https://github.com/b2etw/Spring-Kotlin...

上帝掷硬币:猜猜正面还是反面

『经济学家萨谬森问同事是否愿意赌一次掷硬币,可以赢二百美元或输一百美元。同事说:「我不会赌,因为我对...