2016-10-21 13 views
0

私はPythonの経験がありません。 数日を悩ませているのはこのことです。私は答えを見つけようとしましたが、残念ながら私は成功しませんでした。ファイルからメモリにデータを読み込んでいるので、私はそれを次のように表現する方法を考えました:Functional Pythonでのオブジェクトの表現方法

students [{id: [firstname,lastname,password]}, {id: [firstname,lastname,password]}] 

このアプローチはあなたにどのように見えますか?そして、これを繰り返し、ログイン資格情報をチェックするにはどうすればいいですか?

良いあなたは配列として、各学生の属性を定義します:あまりよくないそれはあなたがオブジェクトの配列として学生を(それぞれがdictである)を定義するPythonの3

+1

これは関数型プログラミングと何が関係していますか?とにかくそこにオブジェクトを使用しています。あなたは質問が不明です。このようなデータ構造を反復する方法を知りたいだけなら、既にそのトピックに重複がたくさんあります。 –

+0

私はクラスを書くことができないので、どうすれば実生活のオブジェクトを表すことができますか?私には分かりませんでした。申し訳ありません。 –

+0

Pythonで組み込みのコンテナクラスを使用しようと考えているようです。私はなぜクラス定義の使用に制限があるのか​​分かりません...しかし、あなたの質問がそのようなデータ構造を反復する方法であるならば、そのトピックについてたくさんの質問があります。 –

答えて

0

です。

この配列は、名前がidの混乱しているプロパティの値です。

、このようなデータを格納するために、より自然な方法は、このようなものです:

students = [{ 
    'id': 1, 
    'firstname': 'Mary', 
    'lastname': 'Jones', 
    'password': 'secret' 
}, { 
    'id': 2, 
    'firstname': 'Liam', 
    'lastname': 'McEnzie', 
    'password': '9#4t&$X' 
}] 
+0

多分 'namedtuple'でしょうか? –

+0

はい、これも適切なデータ構造です。彼らは不変であることに注意してください。 – trincot

0

あなただけの通常の命名体系与え一緒にデータフィールドをバインドするために欠けている場合は、namedtupleは偉大な動作します。 「あなたの場合、またはループのためにPythonで、他のほとんど何も使ってしまう

from collections import namedtuple 

# namedtuple is actually a class-factory: 
Student = namedtuple("Students", ['id','firstname','lastname','password']) 

# notice i'm using a plain tuple as a container - again, we want immutability 
# for a functional approach 
students = (
    Student(id=1, firstname='Rick', lastname='Sanchez', password='rickkyticky'), 
    Student(id=2, firstname='Morty', lastname='Smith', password='password'), 
    Student(id=3, firstname='Summer', lastname='Smith', password='tinkles') 
) 

あなたはあなたのようなこのを反復処理することができます:それはあなたが純粋に機能的なアプローチを維持しようとしている場合は、不変であることの付加的な利点を持っていますむしろ内包(tupleコンストラクタに送り込まこの場合、実際に発電式)を使用して、より多くの機能をd:

>>> for s in students: 
... print(s.password) 
... 
rickkyticky 
password 
tinkles 
>>> passwords = tuple(s.password for s in students) 
>>> passwords 
('rickkyticky', 'password', 'tinkles') 
>>> 

namedtupleは高速で、dictより効率的にかなり多くのメモリ。

関連する問題