Python: у меня может быть список с именованными индексами?

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

31
задан endolith 8 September 2019 в 23:16
поделиться

9 ответов

Это кажется, что массив PHP с помощью названный индексами очень похож на Python dict:

shows = [
  {"id": 1, "name": "Sesaeme Street"},
  {"id": 2, "name": "Dora The Explorer"},
]

См. http://docs.python.org/tutorial/datastructures.html#dictionaries для больше на этом.

48
ответ дан Michael Twomey 27 November 2019 в 21:31
поделиться

Массивы PHP являются на самом деле картами, который эквивалентен dicts в Python.

Таким образом, это - эквивалентный Python:

showlist = [{'id':1, 'name':'Sesaeme Street'}, {'id':2, 'name':'Dora the Explorer'}]

пример Сортировки:

from operator import attrgetter

showlist.sort(key=attrgetter('id'))

, НО! С примером Вы, если, более простой datastructure был бы лучше:

shows = {1: 'Sesaeme Street', 2:'Dora the Explorer'}
21
ответ дан Magnus Hoff 27 November 2019 в 21:31
поделиться

@Unkwntech,

, Что Вы хотите, доступен в просто выпущенном Python 2.6 в форме именованные кортежи . Они позволяют Вам делать это:

import collections
person = collections.namedtuple('Person', 'id name age')

me = person(id=1, age=1e15, name='Dan')
you = person(2, 'Somebody', 31.4159)

assert me.age == me[2]   # can access fields by either name or position
16
ответ дан Dan Lenski 27 November 2019 в 21:31
поделиться

Для помощи будущему Гуглению их обычно называют ассоциативными массивами в PHP и словарями в Python.

9
ответ дан Steve Klabnik 27 November 2019 в 21:31
поделиться

Да,

a = {"id": 1, "name":"Sesame Street"}
7
ответ дан Lou Franco 27 November 2019 в 21:31
поделиться

Необходимо читать учебное руководство по Python и особенно раздел [приблизительно 111] datastructures, который также покрывает словари.

2
ответ дан André 27 November 2019 в 21:31
поделиться

Не точно тот же синтаксис, но существует много расширений словаря там, которые уважают порядок, в котором были добавлены пары ключ/значение. Например, seqdict.

1
ответ дан Alex Coventry 27 November 2019 в 21:31
поделиться

Python имеет списки и указания как две отдельные структуры данных. PHP смешивает оба в один. Вы должны использовать dicts в этом случае.

0
ответ дан Rory 27 November 2019 в 21:31
поделиться

Я сделал это как это:

def MyStruct(item1=0, item2=0, item3=0):
    """Return a new Position tuple."""
    class MyStruct(tuple):
        @property
        def item1(self):
            return self[0]
        @property
        def item2(self):
            return self[1]
        @property
        def item3(self):
            return self[2]
    try:
        # case where first argument a 3-tuple                               
        return MyStruct(item1)
    except:
        return MyStruct((item1, item2, item3))

я сделал это, также немного больше усложняет со списком вместо кортежа, но я имел, переопределяют метод set, а также метода get.

Так или иначе это позволяет:

    a = MyStruct(1,2,3)
    print a[0]==a.item1
-4
ответ дан 27 November 2019 в 21:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: