2016-10-31 9 views
0

データ項目personには、2つのプロパティnameageがあります。pythonでkey:valueのペアを返すにはどうすればよいですか?

person 
    name 
    age 

私は、発信者にこれを返すようにしたいが、使用するどのような方法がわからないと思います。私のアイデアは、これまでしかし、次のとおりです。リストに配置された各personため

  • 辞書 - また、私は2つのプロパティではAttributeError
  • クラスを持って、実行するための構文は少し退屈だった、試してみました - 私もこれについて移動する方法がわからない、でもそれも動作するかどうか

私のコードは、現時点では、このような何か探している:すべての

persons = [] 

for person in people: # "people" fetched from an API 
    persons = { 
     "name": "Foo" 
     "age": "Bar" 
    } 

return persons 


# And then to access returned result 
for person in persons: 
    print(person["name"]) # Gives AttributeError 
    # DoMoreStuff 
+0

'、値を移入します。items() ' – furas

+0

メソッドの外側で' return'を使うことはできません。 –

+0

'for key in personsが必要なためにエラーが発生します:print(persons [key])' – furas

答えて

3

ファーストを - あなたはdictsのリストを返さないエラーです。単なる一言。作成したリストにあなたの人物を追加するのではなく、あなたの人物とリストを置き換えます。だから、それを反復しようとすると、実際にはキーを反復処理します。あなたが望んでいたのはおそらく:

persons.append({ 
    "name": "Foo" 
    "age": "Bar" 
}) 

次のすべて:「2つのプロパティを持つクラス」を取得するには、namedtupleを検索することをおすすめします。

+0

合意。そして、明らかに静的な "Foo"と "Bar"ではなく、実際の値(あなたから読み込まれた 'person'から取得したもの)に' name'と 'age'を設定したいと思います。 – Guillaume

1

zefciuが正しいと私は彼の考えを拡張したいと思います。まず第一に、人のリストを扱う前に、あなたは一人の人と働く方法を知る必要があります。人を表現するには、辞書、クラス、および名前付きタプルの3つの方法があります。

辞書

は人物名(ジョン)、年齢(32)を考えると、あなたは、として、人を表すことができます。

person = {'name': 'John', 'age': 32 } # or 
person = dict(name='John', age=32) 

その後、person['age']としてperson['name']や年齢など、この人の名前にアクセスすることができます。

クラス

あなたはのように初期化とともに、Personクラスを定義することができ

person = Person('John', 32) # or 
person = Person(name='John', age=32) 

print('Name:', person.name) 
print('Age:', person.age) 

namedtuple

:今

class Person: 
    def __init__(self, name, age): 
     self.name = name 
     self.age = age 

は、あなたが人のオブジェクトを作成し、アクセスすることができます

namedtupleはコレクションライブラリの一部なので、インポートする必要があります。ここではそれを定義する方法である:

from collections import namedtuple 
Person = namedtuple('Person', ['name', 'age']) 

はそれを使用するには:

person = Person('John', 32) # or 
person = Person(name='John', age=32) 

print('Name:', person.name) # like a class 
print('Name:', person[0]) # like a tuple 

は個人で一覧キーの

persons = [] 
for person in people: 
    name = ... # extract name from person 
    age = ... # extract age 

    persons.append(dict(name=name, age=age)) # For dictionary 
    persons.append(Person(name=name, age=age)) # For class or namedtuple 
関連する問題