Python Списки \ массивы

280
05 мая 2017, 20:12

Здравствуйте! В PHP массив можно записать таким образом:

$array[$index]['example'] = "My text";

Как провернуть подобную операцию в Python?

Answer 1

Если я правильно понимаю вопрос, то в Python подобное невозможно. Вы сначала должны создать контейнер, а уже потом добавлять в него элементы. В PHP происходит ровно тоже самое, но интерпретатор, скрывает это от Вас. Для вашего примера, контейнер скорее всего будет списком или словарём. Контейнера будет — два. В качестве элемента первого контейнера — второй контейнер. Его тоже нужно сначала создать, а потом добавлять в него элементы.

Существует несколько вариантов, сделать то что вы хотите. Конкретный вариант, зависит от решаемой задачи.

Самое простое — представить вашу структуру данных в виде вложенных словарей.

Вариант 1.

some = dict() 
some[index] = dict()
some['example'] = 'My text'

Вариант 2. Тоже самое можно написать более лаконично:

some = dict() 
some[index] = dict(example='My text')

Вариант 3. Насколько я понимаю index — это число. В таком случае, его не удастся подсунуть как аргумент в конструктор dict(). Но при этом можно воспользоваться литерной формой словарей.

some = {
    index: {
        'example': 'My text'
    }
}

Вариант 4. Это все хорошо, но что делать, если нужен все-таки список, а не словарь.

some = list() 
some += [dict(example='My text')]

Тут мы создали список, и положили в качестве его первого элемента словарь. «К сожалению», списки нумеруются с «0», и далее по порядку. Т.е. нельзя заполнить элементы «5», «10», «25», а остальные не заполнять, как в PHP или Perl.

Если в списке всего один элемент, то можно сократить:

some = [dict(example='My text')]

Вариант 5. Я бы предложил посмотреть в сторону collections. Возможно, исходная задача лучше ляжет на методы из этого модуля.

Вариант 6. Если вы реализуете список данных сложной структуры, то правильнее это делать классами. Так будет проще контролировать происходящее.

Answer 2

Дело в том, что типы данных в разных языках используют одни и те же. Принципы работы с ними тоже примерно одинаковые.

Поэтому ответ будет: точно так же как написали вы, только без знака доллар.

READ ALSO
Error: Could not load model total/sub_total!

Error: Could not load model total/sub_total!

Подскажите пожалуйстаУстановил OpenCart 2

363
Значение мультиселекта поумолчанию

Значение мультиселекта поумолчанию

Использую bootstrap multiselect в форме, необходимо подставлять в мультиселект значения из адресной строкиДля передачи одного значения использовал...

273
Функция glob() не замечает некоторые файлы

Функция glob() не замечает некоторые файлы

Функция glob(path'/*'); не замечает файлы, у которых в начале имени стоит точка

358
Почему file() не читает кириллицу?

Почему file() не читает кириллицу?

Пытаюсь занести данные из текстового файла в file в массив и сравнитьНо столкнулся с проблемой, что с кириллицей ничего не работает

390