Python: можно ли получить список с именованными индексами? - PullRequest
26 голосов
/ 07 октября 2008

В PHP я могу назвать мои массивы, чтобы у меня было что-то вроде:

$shows = Array(0 => Array('id' => 1, 'name' => 'Sesaeme Street'), 
               1 => Array('id' => 2, 'name' => 'Dora The Explorer'));

Возможно ли это в Python?

Ответы [ 10 ]

46 голосов
/ 07 октября 2008

Звучит так, что массив PHP с использованием именованных индексов очень похож на команду python:

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

Подробнее об этом см. http://docs.python.org/tutorial/datastructures.html#dictionaries.

21 голосов
/ 07 октября 2008

Массивы 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'))

НО! В приведенном вами примере более простая структура данных будет лучше:

shows = {1: 'Sesaeme Street', 2:'Dora the Explorer'}
15 голосов
/ 07 октября 2008

@ 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
8 голосов
/ 07 октября 2008

Чтобы помочь будущему Google, в PHP они называются ассоциативными массивами, а в Python - словарями.

6 голосов
/ 07 октября 2008

Да,

a = {"id": 1, "name":"Sesame Street"}
2 голосов
/ 03 сентября 2016

В библиотеке pandas есть действительно аккуратное решение: Series.

book = pandas.Series( ['Introduction to python', 'Someone', 359, 10],
   index=['Title', 'Author', 'Number of pages', 'Price'])
print book['Author']

Для получения дополнительной информации проверьте документацию: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.html.

2 голосов
/ 07 октября 2008

Вы должны прочитать учебник по питону и ESP. раздел о структурах данных , который также охватывает словарей.

1 голос
/ 07 октября 2008

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

0 голосов
/ 14 октября 2008

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

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))

Я также сделал это немного сложнее со списком, а не с кортежем, но я переопределил как установщик, так и получатель.

В любом случае это позволяет:

    a = MyStruct(1,2,3)
    print a[0]==a.item1
0 голосов
/ 07 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...