Вложено, пока L oop работает не так, как хотелось бы - PullRequest
1 голос
/ 29 марта 2020

Я недавно начал изучать Python, и я новичок здесь в стеке переполнение . Я терял сон из-за кода ниже. Я знаю, что ошибка должна быть очень глупой, но я не могу ее найти: (

Может кто-нибудь помочь мне выяснить, почему мой код не выводит следующее:

[
    {"first_name": "Elisabeth", "last_name": "Gardenar", "city": "Toledo", "state": "OH"},
    {"first_name": "Jamaal", "last_name": "Du", "city": "Sylvania", "state": "OH"},
    {"first_name": "Kathlyn", "last_name": "Lavoie", "city": "Maumee", "state": "OH"}
]

Вот мой код:

def convert_table(table_data):  


  new_table = []
  user_dict = {}
  row = 1
  i = 0

  while row < len(table_data): 
    while i < len(table_data[0]):
      user_dict[table_data[0][i]] = table_data[row][i]
      i += 1
    new_table.append(user_dict)
    row += 1

  return new_table


table_data = [
    ["first_name", "last_name", "city", "state"],
    ["Elisabeth", "Gardenar", "Toledo", "OH"],
    ["Jamaal", "Du", "Sylvania", "OH"],
    ["Kathlyn", "Lavoie", "Maumee", "OH"]
] 


print(convert_table(table_data)) 

Вот токовый выход:

[
{'first_name': 'Elisabeth', 'last_name': 'Gardenar', 'city': 'Toledo', 'state': 'OH'}, 
{'first_name': 'Elisabeth', 'last_name': 'Gardenar', 'city': 'Toledo', 'state': 'OH'}, 
{'first_name': 'Elisabeth', 'last_name': 'Gardenar', 'city': 'Toledo', 'state': 'OH'}
]

Ответы [ 3 ]

2 голосов
/ 29 марта 2020

На самом деле вам нужно сбросить оба user_dict & i во внешнем l oop:

def convert_table(table_data):
  new_table = []
  row = 1

  while row < len(table_data):
    user_dict = {}
    i = 0
    while i < len(table_data[0]):
      user_dict[table_data[0][i]] = table_data[row][i]
      i += 1
    new_table.append(user_dict)
    row += 1

  return new_table
0 голосов
/ 29 марта 2020

Вы можете использовать dict(zip()) внутри списка, где ключами является первый индекс table_data, и использовать for-l oop, чтобы получить остальную часть table_data в качестве значений:

table_data = [
    ["first_name", "last_name", "city", "state"],
    ["Elisabeth", "Gardenar", "Toledo", "OH"],
    ["Jamaal", "Du", "Sylvania", "OH"],
    ["Kathlyn", "Lavoie", "Maumee", "OH"]
]

lst = [dict(zip(table_data[0], values)) for values in table_data[1:]]

print(lst)

output :

[{'first_name': 'Elisabeth', 'last_name': 'Gardenar', 'city': 'Toledo', 'state': 'OH'}, {'first_name': 'Jamaal', 'last_name': 'Du', 'city': 'Sylvania', 'state': 'OH'}, {'first_name': 'Kathlyn', 'last_name': 'Lavoie', 'city': 'Maumee', 'state': 'OH'}]
0 голосов
/ 29 марта 2020

Вы продолжаете перезаписывать одно и то же user_dict. Вместо этого вы должны создавать новый в каждой итерации l oop:

while row < len(table_data): 
  user_dict = {}
  while i < len(table_data[0]):
    user_dict[table_data[0][i]] = table_data[row][i]
    i += 1
  new_table.append(user_dict)
  row += 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...