Quiero recorrer en iteración una lista de listas y si una instancia en la lista coincide con una clave en un diccionario, agregue 1 al valor de la clave del diccionario. Sin embargo, cuando ejecuto mi código, devuelve el diccionario sin cambios en los valores. Gracias por su tiempo y ayuda. Busqué una pregunta similar pero no encontré ninguna que abordara este problema. Mis disculpas si me lo perdí.

Tengo una lista de huracanes y las áreas que afectaron. Tengo un diccionario con pares de claves y valores para el área afectada de forma única y el número de veces afectado (establecido en cero). Quiero recorrer la lista de instancias de huracanes y cada vez que paso por una ubicación en el diccionario, aumento el valor del área única en 1. Actualmente, con el código que estoy ejecutando, el diccionario devuelto no ha cambiado.

He incluido ejemplos más pequeños de material con el que estoy trabajando: (test_list es una lista de áreas afectadas por un huracán que da como resultado una lista de listas)

test_list = [['Central America', 'Mexico', 'Cuba', 'Florida', 'The Bahamas'], ['Lesser Antilles', 'The Bahamas', 'United States East Coast', 'Atlantic Canada'], ['The Bahamas', 'Northeastern United States'], ['Lesser Antilles', 'Jamaica', 'Cayman Islands', 'Cuba', 'The Bahamas', 'Bermuda']]

test_dict = {
'Central America': 0, 'Mexico': 0, 'Cuba': 0, 'Florida', 0, 'The Bahamas': 0, 'Lesser Antilles': 0, 'United States East Coast', 'Atlantic Canada': 0, 'Northeastern United States': 0, 'Jamaica': 0, 'Cayman Islands': 0, 'Bermuda': 0}

META

Si realicé:

area_counted = area_counter(test_list, test_dict)

Hubiera esperado:

area_counted = {
'Central America': 1, 'Mexico': 1, 'Cuba': 2, 'Florida', 1, 'The Bahamas': 4, 'Lesser Antilles': 2, 'United States East Coast': 1, 'Atlantic Canada': 1, 'Northeastern United States': 1, 'Jamaica': 1, 'Cayman Islands': 1, 'Bermuda': 1}

Sin embargo, este no fue mi resultado.

CÓDIGO

def area_count(input_dict, input_list):
  new_dict = {}
  new_dict.update(input_dict)
  for i in list:
      for j in i:
        if j == new_dict[j]:
          new_dict[j] += 1
        else:
          pass
  return new_dict

area_counted = area_count(test_dict, test_list)
print(area_counted)

genera lo siguiente:

area_counted = {
'Central America': 0, 'Mexico': 0, 'Cuba': 0, 'Florida', 0, 'The Bahamas': 0, 'Lesser Antilles': 0, 'United States East Coast', 'Atlantic Canada': 0, 'Northeastern United States': 0, 'Jamaica': 0, 'Cayman Islands': 0, 'Bermuda': 0}

Edit-1: parámetros editados area_count a input_list en lugar de list, orden de entrada de parámetros corregido para area_counted para que coincida con la función area_count.

-1
jpank 24 ene. 2021 a las 22:30

1 respuesta

La mejor respuesta

new_dict[j] siempre es igual a 0 inicialmente (ya que en test_dict todos los valores son 0)

Lo estás comparando con una cuerda

if "Central America" == 0:
    set_to_1()

Con suerte, puede ver cómo esto nunca lo establece en 1

Creo que lo que quieres es

if j in new_dict:
    new_dict[j] = 1

Como un aparte no relacionado, realmente no debe nombrar una variable list ya que es una entidad incorporada que termina sombreando

0
Joran Beasley 24 ene. 2021 a las 19:33