web-dev-qa-db-ja.com

Python:名前付きインデックスのリストを作成できますか?

PHPでは、配列のインデックスに名前を付けて、次のようにすることができます。

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

これはPythonで可能ですか?

35
UnkwnTech

これは、PHP名前付きインデックスを使用した配列は、python dictに非常に似ています:

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

詳細は http://docs.python.org/tutorial/datastructures.html#dictionaries を参照してください。

51
Michael Twomey

PHPの配列は実際にはマップであり、Pythonのdictと同等です。

したがって、これは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'}
21
Deestan

@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
16
Dan Lenski

将来のグーグルを支援するために、これらは通常、PHPでは連想配列、Pythonでは辞書と呼ばれます。

9
Steve Klabnik

はい、

a = {"id": 1, "name":"Sesame Street"}
8
Lou Franco

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
Sreekanth

python tutorial およびespをお読みください。 datastructures に関するセクション (dictionaries。

2
André

まったく同じ構文ではありませんが、キーと値のペアが追加された順序を尊重する辞書拡張機能がいくつかあります。例えば。 seqdict

1
Alex Coventry

Pythonには2つの別個のデータ構造としてリストとディクテーションがあります。 PHPは両方を1つに混合します。この場合は、dictsを使用する必要があります。

0
Rory