python проблема с массивом

Рейтинг: 2Ответов: 1Опубликовано: 05.04.2015

Добрый день,
Как сделать так,чтобы в массиве user подмассивов было столько сколько в data значений?
К примеру если у data 2 значения

user = [{'id':data[0],'email':data[1]},{'id':data[0],'email':data[1]}]

У меня получилось вот что

data=[['sad','sdada'],['sqewad','sdadewa'],['sakjjk','hghfada']]
r=len(data)
i=0
while i < r:
    user[i] = [data[i][0],data[i][1]]
    i = i + 1

Правильно ли я решаю задачу? В чем ошибка кода?

Ответы

▲ 2Принят

Ошибка как минимум в том, что отступы в Python критичны. Вы объявляете цикл while без тела. Кроме того, здесь уместнее использовать цикл for, а не while. Также, одним из недостатков Вашего кода является то, что Вам нужно сначала определить размер массива.

Вашу задачу можно решить проще, если воспользоваться конструктором списков:

In [1]: data=[['sad','sdada'],['sqewad','sdadewa'],['sakjjk','hghfada']]

In [2]: user = [{'id': u[0], 'email': u[1]} for u in data]

In [3]: user
Out[3]: 
[{'email': 'sdada', 'id': 'sad'},
 {'email': 'sdadewa', 'id': 'sqewad'},
 {'email': 'hghfada', 'id': 'sakjjk'}]

Или функцией map (в Python 3 возвращает итератор, поэтому обернута в list):

In [4]: user = list(map(lambda u: {'id': u[0], 'email': u[1]}, data))

In [5]: user
Out[5]: 
[{'email': 'sdada', 'id': 'sad'},
 {'email': 'sdadewa', 'id': 'sqewad'},
 {'email': 'hghfada', 'id': 'sakjjk'}]