Anidamiento del diccionario de Python

Anidado

A veces, debe almacenar una serie de diccionarios en una lista, o almacenar una lista como un valor en un diccionario. Este requisito se denomina anidamiento. Puede anidar diccionarios en listas, anidar listas en diccionarios e incluso diccionarios en diccionarios. La anidación es una característica poderosa.
1. Lista de diccionarios
Tomemos un ejemplo. El diccionario alien_0 contiene todo tipo de información sobre un alienígena, pero no puede almacenar la información sobre el segundo alienígena, y mucho menos la información sobre todos los alienígenas en la pantalla, cómo administrarlo ¿Qué hay de los extraterrestres? Una forma es crear una lista de extraterrestres, donde cada extraterrestre es un diccionario que contiene información diversa sobre el extraterrestre. Por ejemplo:

alien_0 = {'color' : ' green ' , ' points ' : 5}
alien_1 = {'color' : ' yellow ' , 'points' : 10}
alien_2 = {'color' : 'red', 'points' : '15'}

aliens = [alien_0 ,  alien_1 , alien_2]

for alien in aliens:
	print(alien)

book@www.100ask.org:~/python/L9$ python aliens.py
{'color': ' green ', ' points ': 5}
{'color': ' yellow ', 'points': 10}
{'color': 'red', 'points': '15'}

Primero cree tres diccionarios, cada uno de los cuales representa un extraterrestre. Luego, colocamos estos diccionarios en una lista de nombres extraterrestres. Finalmente, recorremos la lista e imprimimos cada extraterrestre.
Por supuesto, es más realista que haya más de tres extraterrestres en el juego, de lo contrario el juego es aburrido, no lo es, y cada extraterrestre se genera automáticamente usando código , echemos un vistazo a una pequeña ciruela, nosotros Usa range () para generar 30 alienígenas:

# Create empty list, use it store alien
aliens = []

#create thirties alien
for alien_number in range(30):
	new_alien = {'color' : 'green' , 'points' : 5, 'speed' : 'slow'}
	aliens.append(new_alien)

#display five alien
for alien in aliens[:5]:
	print(alien)
print("...")

#Show how many aliens have been created
print("Total number of aliens: " + str(len(aliens)))
book@www.100ask.org:~/python/L9$ python aliens.py
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
...
Total number of aliens: 30

Estos alienígenas creados tienen las mismas características, pero en opinión de Python, cada alienígena es independiente, por lo que podemos modificar cada alienígena de forma independiente.
¿En qué circunstancias necesitas tratar con grupos de extraterrestres? Imagina que a medida que avanza el juego, algunos alienígenas cambiarán de color y se moverán más rápido. Si es necesario, podemos usar bucles for y declaraciones para modificar el color de algunos alienígenas, por ejemplo, necesitamos modificar los primeros tres alienígenas a amarillo, con una velocidad media y un valor de 10 puntos.

# Create empty list, use it store alien
aliens = []

#create thirties alien
for alien_number in range(0 , 30):
	new_alien = {'color' : 'green' , 'points' : 5, 'speed' : 'slow'}
	aliens.append(new_alien)

#display five alien
for alien in aliens[0 : 3]:
	if alien['color'] == 'green':
		alien['color'] = 'yellow'
		alien['speed'] = 'medium'
		alien[' points '] = 10
for alien in aliens[0 : 5]:
	print(alien)
	
print("...")

book@www.100ask.org:~/python/L9$ python aliens.py
{'color': 'yellow', 'points': 5, 'speed': 'medium', ' points ': 10}
{'color': 'yellow', 'points': 5, 'speed': 'medium', ' points ': 10}
{'color': 'yellow', 'points': 5, 'speed': 'medium', ' points ': 10}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
...

En vista de la necesidad de modificar la información de los primeros tres extraterrestres, es necesario atravesar un segmento que contenga solo estos extraterrestres. Actualmente, todos los alienígenas son verdes, pero este no es siempre el caso, por lo que escribimos una declaración if para garantizar que solo se modifiquen los alienígenas verdes. Si el alienígena es verde, cambiaremos su color a 'amarillo', cambiaremos su velocidad a 'medio' y cambiaremos sus puntos a 10.
Por supuesto, puede expandirse de la siguiente manera:

for alien in aliens[0 : 3]:
	if alien['color'] == 'green':
		alien['color'] = 'yellow'
		alien['speed'] = 'medium'
		alien[' points '] = 10
	elif alien['color'] == 'yellow':
		alien['color'] = 'red'
		alien['speed'] = 'fast'
		alien['points'] = 15

¿Piensa en cómo cambiar de amarillo a rojo?
A menudo es necesario incluir una gran cantidad de diccionarios en la lista, y cada diccionario contiene mucha información sobre un objeto específico. Por ejemplo, es posible que deba crear un diccionario para cada usuario del sitio web y almacenar estos diccionarios en una lista llamada usuarios. En esta lista, todos los diccionarios tienen la misma estructura, por lo que puede iterar a través de esta lista y usar la misma Cada diccionario
2. Al almacenar la lista en el diccionario,
debe almacenar la lista en el diccionario en lugar de almacenar el diccionario en la lista. Por ejemplo, cómo describir la pizza ordenada por el cliente, la lista de uso solo puede almacenar los ingredientes de la pizza que se agregarán; pero si usa un diccionario, no solo puede incluir la lista de ingredientes, sino también contener otras descripciones sobre la pizza.
Veamos un ejemplo específico, debe almacenar dos tipos de información sobre la pizza: el tipo de piel y la lista de ingredientes. La lista de ingredientes es un valor asociado con la clave 'toppings'. Para acceder a la lista, utilizamos el nombre del diccionario y la clave 'toppings', al igual que acceder a otros valores en el diccionario. Devolverá una lista de ingredientes en lugar de un solo valor:

pizza = {
	'crust' : 'thick',
	'toppings' : ['mushrooms' , 'extra cheese'] ,
	}

print("You ordered a " + pizza['crust'] + " -crust pizza " + 
	" with the following toppings: ")
for topping in pizza['toppings']:
	print("\t" + topping)

book@www.100ask.org:~/python/L9$ python pizza.py
You ordered a thick -crust pizza  with the following toppings:
        mushrooms
        extra cheese

En el ejemplo, primero creamos una lista, que almacenaba información sobre las pizzas ordenadas por los clientes. En este diccionario, una clave es 'corteza', y el valor asociado es la cadena 'gruesa'; la siguiente clave es 'coberturas', y el valor asociado es una lista, que almacena la solicitud del cliente para agregar Ingredientes
Siempre que necesite asociar una clave a múltiples valores en un diccionario, puede anidar una lista en el diccionario.
A continuación damos un ejemplo para ver:

favorite_languages = {
	'jen' : ['python' , 'ruby'],
	'sarah' : ['C'],
	'edward' : ['ruby' , 'go'],
	'phil' : ['python' , 'haskell'],
	}
for name , languages in favorite_languages.items():
	print("\n" + name.title() + " 's favorite languages are:")
	for language in languages:
		print("\t" +language.title())

book@www.100ask.org:~/python/L9$ python favorite_languages.py

Sarah 's favorite languages are:
        C

Edward 's favorite languages are:
        Ruby
        Go

Jen 's favorite languages are:
        Python
        Ruby

Phil 's favorite languages are:
        Python
        Haskell

El programa se puede mejorar aún más de la siguiente manera:

favorite_languages = {
	'jen' : ['python' , 'ruby'],
	'sarah' : ['C'],
	'edward' : ['ruby' , 'go'],
	'phil' : ['python' , 'haskell'],
	}
	
for name , languages in favorite_languages.items():
	if len(languages) > 1:
		print("\n" + name.title() + " 's favorite languages are:")
		for language in languages:
			print("\t" +language.title())
	else:
		for language in languages:
			print( name.title() + " 's favorite languages is " + language.title())

book@www.100ask.org:~/python/L9$ python favorite_languages.py
Sarah 's favorite languages is C

Edward 's favorite languages are:
        Ruby
        Go

Jen 's favorite languages are:
        Python
        Ruby

Phil 's favorite languages are:
        Python
        Haskell

3. Almacene el diccionario
en el diccionario Puede anidar el diccionario en el diccionario, pero al hacerlo, el código puede volverse complicado. Por ejemplo, si hay varios usuarios del sitio web, cada usuario tiene un nombre de usuario único, puede usar el nombre de usuario como clave en el diccionario y luego almacenar la información de cada usuario en un diccionario y usar el diccionario como nombre de usuario El valor asociado. En el siguiente programa, para cada usuario, hemos almacenado sus tres elementos de información: nombre, apellido y lugar de residencia; para acceder a esta información, recorremos todos los nombres de usuario y accedemos a los asociados con cada nombre de usuario Diccionario de información:

users = {
	'aeinstein' : {
		'first' : 'albert',
		'last' : 'einstein',
		'location' : 'princeton',
		},
	'mcurie' : {
		'first' : 'marie',
		'last' : 'curie',
		'location' : 'paris',
		}
	}

for username, userinfo in users.items():
	print("\nUsername: " + username)
	full_name = userinfo['first'] + userinfo['last']
	location = userinfo['location']

	print("\tFull name: " + full_name.title())
	print("\t location: " + location.title())

book@www.100ask.org:~/python/L9$ python many_users.py

Username: aeinstein
        Full name: Alberteinstein
         location: Princeton

Username: mcurie
        Full name: Mariecurie
         location: Paris

En este ejemplo, primero defina un diccionario llamado usuarios, que contiene dos claves: los nombres de usuario 'aeinstein' y 'mcurie'; el valor asociado con cada clave es un diccionario, que contiene el nombre del usuario, Apellido y lugar de residencia. Primero atraviese a los usuarios del diccionario, deje que Python almacene cada clave en el nombre de usuario de la variable a su vez, y almacene el diccionario asociado con la clave actual en la información de usuario de la variable a su vez, luego en el bucle principal imprimimos el nombre de usuario y luego comenzamos a acceder al interno Dictionary, la variable userinfo contiene el diccionario de información del usuario, y el diccionario contiene tres claves: 'first', 'last' y 'location'; para cada usuario, usamos estas claves para generar un nombre y lugar de residencia limpios, luego Imprimirlo
Nota: La estructura del diccionario para cada usuario es la misma, aunque Python no tiene ese requisito, hace que los diccionarios anidados sean más fáciles de manejar. Si el diccionario de cada usuario contiene claves diferentes, el código dentro del bucle for será más complicado

newpeopel_0 = {'name' : 'xiao ming'  , 'age ' : 23  , 'city' : 'Beijing'      , 'jiaxiang'  : 'hebei',}
newpeopel_1 = { 'name' : 'xiao hong' , 'age' : 18  , 'city' : 'Shanghai'  , 'jiaxiang'  : 'shanghai',}
newpeopel_2 = { 'name' : 'lao wang'   ,  'age' : 45  , 'city' :  'Shenzhen' , 'jiaxiang'  : 'shenzhen',}

newpeopels = [newpeopel_0 , newpeopel_1, newpeopel_2]

for newpeopel in newpeopels:
	print(newpeopel)
book@www.100ask.org:~/python/L9$ python new\ peopel.py
{'city': 'Beijing', 'jiaxiang': 'hebei', 'name': 'xiao ming', 'age ': 23}
{'city': 'Shanghai', 'age': 18, 'jiaxiang': 'shanghai', 'name': 'xiao hong'}
{'city': 'Shenzhen', 'age': 45, 'jiaxiang': 'shenzhen', 'name': 'lao wang'}

newpeopels = {
	'xiaoming' : [23 , 'Beijing', 'HeBei'],
	'xiaohong' : [18 , 'ShangHai' , 'ShangHai'],
	'laowang' :  [45 ,  'ShenZhen', 'ShenZhen'],
	}

for name, userinfos in newpeopels.items():
	print("\n name: " + name.title())
	for info in userinfos:
		print( info)
book@www.100ask.org:~/python/L9$ python new\ peopel.py

 name: Xiaoming
23
Beijing
HeBei

 name: Xiaohong
18
ShangHai
ShangHai

 name: Laowang
45
ShenZhen
ShenZhen

Publicado 53 artículos originales · elogiado 16 · visitas 2213

Supongo que te gusta

Origin blog.csdn.net/m0_37757533/article/details/105341354
Recomendado
Clasificación