假设我有一个数据项person
,其中包含两个属性name
和age
,这样就可以了;
person
name
age
我想将其返回给调用者,但不确定使用什么方法。到目前为止,我的想法是:
person
的字典 - 尝试过,执行的语法有点乏味,我也得到了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 :(得分:3)
首先 - 你没有返回一个dicts列表的错误。只是一个单词。您可以将人员替换为列表,而不是将您的人员附加到您创建的列表中。所以,如果你试图迭代它,你实际上迭代了键。你想要的可能是:
persons.append({
"name": "Foo"
"age": "Bar"
})
其次:要获得“具有两个属性的类”,我建议查看namedtuple。 https://docs.python.org/3/library/collections.html#collections.namedtuple
答案 1 :(得分:1)
zefciu 是正确的,我想扩展他的想法。首先,在处理人员清单之前,您需要知道如何与一个人合作。有三种表示人的方式:字典,类和命名元组。
根据人名(John)和年龄(32),您可以将某人代表为:
person = {'name': 'John', 'age': 32 } # or
person = dict(name='John', age=32)
然后,您可以将此人的姓名视为person['name']
,并将其作为person['age']
年龄。
您可以定义一个人类,以及初始化程序:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
现在,您可以创建和访问人物对象:
person = Person('John', 32) # or
person = Person(name='John', age=32)
print('Name:', person.name)
print('Age:', person.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