Conocimientos básicos de Python (5): Conocimiento detallado de diccionarios, conjuntos y secuencias.

1 diccionario

1.1 Tipos mutables e inmutables

  • Las secuencias están indexadas por números enteros consecutivos. La diferencia es que los diccionarios están indexados por "palabras clave". Las palabras clave pueden ser de cualquier tipo inmutable, generalmente cadenas o números.
  • Python es solo un tipo de mapeo de diccionario , una cadena, una lista de tuplas pertenece al tipo de secuencia .
    Entonces, ¿qué tan rápido determinar un tipo de datos Xno es el tipo de variable? Dos métodos:
  • Método de problema: La id(X)función de X para una determinada operación, comparando antes y después de la operación id, si no es la misma, no Xse puede cambiar, si es la misma, es Xvariable.
  • Métodos convenientes: usar hash(X), siempre que no haya errores, la prueba se Xpuede usar con hash, es decir, no se puede cambiar, no se puede usar con hash a su vez, se puede cambiar.
    【ejemplo】
i = 1
print(id(i))  # 140732167000896
i = i + 2
print(id(i))  # 140732167000960
l = [1, 2]
print(id(l))  # 4300825160
l.append('Python')
print(id(l))  # 4300825160
  • Entero ien Canadá después de un idhombre diferente antes, por lo que esto después de la finalización de la adición i(aunque el nombre no se cambia), pero no antes de agregar eso i, por lo que los enteros son inmutables.
  • Una lista de los ladicional 'Python'después idy antes de la misma, por lo que la lista es los tipos de variables.
    【ejemplo】
print(hash('Name'))  # -9215951442099718823
print(hash((1, 2, 'Python')))  # 823362308207799471
print(hash([1, 2, 'Python']))
# TypeError: unhashable type: 'list'
print(hash({
    
    1, 2, 3}))
# TypeError: unhashable type: 'set'
  • Los valores, los caracteres y las tuplas se pueden aplicar mediante hash, por lo que son tipos inmutables.
  • Las listas, los conjuntos y los diccionarios no pueden tener hash, por lo que son tipos mutables.

1.2 Definición del diccionario

Un diccionario es un conjunto desordenado de key:valuepares clave: valor ( ), las claves deben ser diferentes entre sí (dentro del mismo diccionario).

  • dictEl pedido y el almacenamiento interno del keypedido realizado no están relacionados.
  • dictBusque e inserte rápidamente, no con keylos aumentos, pero tomaría mucha memoria.
    La sintaxis de la definición del diccionario es{元素1, 元素2, ..., 元素n}
  • Cada elemento es un `` par clave-valor '' - clave: valor ( key:value)
  • Los puntos clave son "corchetes ()", "coma" y "dos puntos:"
  • Ata todos los elementos con tirantes
  • Separar por comas cada par clave-valor
  • Valor y clave separados por dos puntos

1.3 Crear y acceder a diccionarios

【ejemplo】

brand = ['李宁', '耐克', '阿迪达斯']
slogan = ['一切皆有可能', 'Just do it', 'Impossible is nothing']
print('耐克的口号是:', slogan[brand.index('耐克')])  
# 耐克的口号是: Just do it
dic = {
    
    '李宁': '一切皆有可能', '耐克': 'Just do it', '阿迪达斯': 'Impossible is nothing'}
print('耐克的口号是:', dic['耐克'])  
# 耐克的口号是: Just do it

keyCree un diccionario por cadena o valor numérico .
Nota: Si la clave que tomamos no existe en el diccionario, se reportará un error directamente KeyError.
【ejemplo】

dic1 = {
    
    1: 'one', 2: 'two', 3: 'three'}
print(dic1)  # {1: 'one', 2: 'two', 3: 'three'}
print(dic1[1])  # one
print(dic1[4])  # KeyError: 4
dic2 = {
    
    'rice': 35, 'wheat': 101, 'corn': 67}
print(dic2)  # {'wheat': 101, 'corn': 67, 'rice': 35}
print(dic2['rice'])  # 35

[Ejemplo] Use tuplas keypara crear un diccionario, pero generalmente no se usa de esta manera.

dic = {
    
    (1, 2, 3): "Tom", "Age": 12, 3: [3, 5, 7]}
print(dic)  # {(1, 2, 3): 'Tom', 'Age': 12, 3: [3, 5, 7]}
print(type(dic))  # <class 'dict'>

dictCrea un diccionario a través del constructor .

  • dict()-> Crea un diccionario vacío.
    [Ejemplo] Al keycolocar directamente los datos en el diccionario, pero uno keysolo puede corresponder a uno value, y al keycolocarlo en uno varias veces value, este último valor eliminará el valor anterior.
dic = dict()
dic['a'] = 1
dic['b'] = 2
dic['c'] = 3
print(dic)
# {'a': 1, 'b': 2, 'c': 3}
dic['a'] = 11
print(dic)
# {'a': 11, 'b': 2, 'c': 3}
dic['d'] = 4
print(dic)
# {'a': 11, 'b': 2, 'c': 3, 'd': 4}
  • dict(mapping)-> nuevo diccionario inicializado a partir de pares (clave, valor) de un objeto de mapeo
    【例子】
dic1 = dict([('apple', 4139), ('peach', 4127), ('cherry', 4098)])
print(dic1)  # {'cherry': 4098, 'apple': 4139, 'peach': 4127}
dic2 = dict((('apple', 4139), ('peach', 4127), ('cherry', 4098)))
print(dic2)  # {'peach': 4127, 'cherry': 4098, 'apple': 4139}
  • dict(**kwargs)-> nuevo diccionario inicializado con los pares nombre = valor en la lista de argumentos de palabras clave. Por ejemplo: dict (uno = 1, dos = 2)
    [Ejemplo] En este caso, la clave solo puede ser un tipo de cadena, y cuando se crea Las cadenas no se pueden citar y los errores de sintaxis se informarán directamente si se agregan.
dic = dict(name='Tom', age=10)
print(dic)  # {'name': 'Tom', 'age': 10}
print(type(dic))  # <class 'dict'>


## 1.4 字典的内置方法
- `dict.fromkeys(seq[, value])` 用于创建一个新字典,以序列 `seq` 中元素做字典的键,`value` 为字典所有键对应的初始值。
【例子】
```python
seq = ('name', 'age', 'sex')
dic1 = dict.fromkeys(seq)
print("新的字典为 : %s" % str(dic1))  
# 新的字典为 : {'name': None, 'age': None, 'sex': None}
dic2 = dict.fromkeys(seq, 10)
print("新的字典为 : %s" % str(dic2))  
# 新的字典为 : {'name': 10, 'age': 10, 'sex': 10}
dic3 = dict.fromkeys(seq, ('小马', '8', '男'))
print("新的字典为 : %s" % str(dic3))  
# 新的字典为 : {'name': ('小马', '8', '男'), 'age': ('小马', '8', '男'), 'sex': ('小马', '8', '男')}
  • dict.keys()Devuelve un objeto iterador que se puede utilizar list()para convertir a la lista, una lista de todas las claves del diccionario.
    【ejemplo】
dic = {
    
    'Name': 'lsgogroup', 'Age': 7}
print(dic.keys())  # dict_keys(['Name', 'Age'])
lst = list(dic.keys())  # 转换为列表
print(lst)  # ['Name', 'Age']
  • dict.values()Devuelve un iterador que se puede utilizar list()para convertir una lista, una lista de todos los valores del diccionario.
    【ejemplo】
dic = {
    
    'Sex': 'female', 'Age': 7, 'Name': 'Zara'}
print("字典所有值为 : ", list(dic.values()))  
# 字典所有值为 :  [7, 'female', 'Zara']
  • dict.items()Devuelve una matriz de tuplas transitable (clave, valor) como una lista.
    【ejemplo】
dic = {
    
    'Name': 'Lsgogroup', 'Age': 7}
print("Value : %s" % dic.items())  
# Value : dict_items([('Name', 'Lsgogroup'), ('Age', 7)])
print(tuple(dic.items()))  
# (('Name', 'Lsgogroup'), ('Age', 7))
  • dict.get(key, default=None)Devuelve el valor de la clave especificada o el valor predeterminado si el valor no está en el diccionario.
    【ejemplo】
dic = {
    
    'Name': 'Lsgogroup', 'Age': 27}
print("Age 值为 : %s" % dic.get('Age'))  # Age 值为 : 27
print("Sex 值为 : %s" % dic.get('Sex', "NA"))  # Sex 值为 : NA
  • dict.setdefault(key, default=None)Y un get()método similar, si la clave no existe en el diccionario, agregará clave y valor al valor predeterminado.
    【ejemplo】
dic = {
    
    'Name': 'Lsgogroup', 'Age': 7}
print("Age 键的值为 : %s" % dic.setdefault('Age', None))  # Age 键的值为 : 7
print("Sex 键的值为 : %s" % dic.setdefault('Sex', None))  # Sex 键的值为 : None
print("新字典为:", dic)  
# 新字典为: {'Age': 7, 'Name': 'Lsgogroup', 'Sex': None}
  • key in dict inEl operador se utiliza para determinar si la clave existe en el diccionario, si la clave se devuelve en el diccionario del diccionario true, de lo contrario, se devuelve false. El not inoperador es todo lo contrario, si la clave se devuelve en el dict false, de lo contrario se devuelve true.
    【ejemplo】
dic = {
    
    'Name': 'Lsgogroup', 'Age': 7}
# in 检测键 Age 是否存在
if 'Age' in dic:
    print("键 Age 存在")
else:
    print("键 Age 不存在")
# 检测键 Sex 是否存在
if 'Sex' in dic:
    print("键 Sex 存在")
else:
    print("键 Sex 不存在")
# not in 检测键 Age 是否存在
if 'Age' not in dic:
    print("键 Age 不存在")
else:
    print("键 Age 存在")
# 键 Age 存在
# 键 Sex 不存在
# 键 Age 存在
  • dict.pop(key[,default])Eliminar diccionario keySe elimina el valor de clave dado que corresponde al valor de retorno. keyDebe darse el valor. Si keyno está presente, entonces el defaultvalor de retorno .
  • del dict[key]Eliminar diccionario dado que el keyvalor clave corresponde.
    【ejemplo】
dic1 = {
    
    1: "a", 2: [1, 2]}
print(dic1.pop(1), dic1)  # a {2: [1, 2]}
# 设置默认值,必须添加,否则报错
print(dic1.pop(3, "nokey"), dic1)  # nokey {2: [1, 2]}
del dic1[2]
print(dic1)  # {}
  • dict.popitem()Devuelve y elimina aleatoriamente un par de claves y valores en el diccionario. Si el diccionario ya está vacío, pero se llama a este método, se informará de una excepción KeyError.
    【ejemplo】
dic1 = {
    
    1: "a", 2: [1, 2]}
print(dic1.popitem())  # (1, 'a')
print(dic1)  # {2: [1, 2]}
  • dict.clear()Se utiliza para eliminar todos los elementos del diccionario.
    【ejemplo】
dic = {
    
    'Name': 'Zara', 'Age': 7}
print("字典长度 : %d" % len(dic))  # 字典长度 : 2
dict.clear()
print("字典删除后长度 : %d" % len(dic))  # 字典删除后长度 : 0
  • dict.copy()Devuelva una copia superficial del diccionario.
    【ejemplo】
dic1 = {
    
    'Name': 'Lsgogroup', 'Age': 7, 'Class': 'First'}
dic2 = dic1.copy()
print("新复制的字典为 : ", dic2)  
# 新复制的字典为 :  {'Age': 7, 'Name': 'Lsgogroup', 'Class': 'First'}

[Ejemplo] La diferencia entre asignación directa y copia

dic1 = {
    
    'user': 'lsgogroup', 'num': [1, 2, 3]}
# 引用对象
dic2 = dic1  
# 深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用
dic3 = dic1.copy()  
print(id(dic1))  # 148635574728
print(id(dic2))  # 148635574728
print(id(dic3))  # 148635574344
# 修改 data 数据
dic1['user'] = 'root'
dic1['num'].remove(1)
# 输出结果
print(dic1)  # {'user': 'root', 'num': [2, 3]}
print(dic2)  # {'user': 'root', 'num': [2, 3]}
print(dic3)  # {'user': 'runoob', 'num': [2, 3]}
  • dict.update(dict2)El parámetro dict2de diccionario de las key:valueactualizaciones del diccionario dicten.
    【ejemplo】
dic = {
    
    'Name': 'Lsgogroup', 'Age': 7}
dic2 = {
    
    'Sex': 'female', 'Age': 8}
dic.update(dic2)
print("更新字典 dict : ", dic)  
# 更新字典 dict :  {'Sex': 'female', 'Age': 8, 'Name': 'Lsgogroup'}

Supongo que te gusta

Origin blog.csdn.net/OuDiShenmiss/article/details/107723518
Recomendado
Clasificación