2008-10-07 2 views
20

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

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

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

+2

Прежде чем комментировать, да, это 2 из моих любимых шоу. :) – UnkwnTech 2008-10-07 12:30:28

ответ

42

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

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

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

+2

Бит слишком сложный. Я думаю, что плакат нуждался в dicts – Rory 2008-10-07 15:54:31

+2

Это на самом деле список словарей. – 2014-06-22 20:46:33

6

Да,

a = {"id": 1, "name":"Sesame Street"} 
20

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'} 
5

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

1

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

14

@Unkwntech,

Что вы хотите доступна в только что выпустили Python 2.6 в виде named tuples. Они позволяют это сделать:

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 
+0

Конечно, это может быть смоделировано для более старых версий Python (пример: http://users.forthnet.gr/ath/chrisgeorgiou/python/TupleStruct.py) – tzot 2008-10-07 15:53:23

0

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

-4

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

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 
Смежные вопросы