如何在python中返回key:value对的集合?

时间:2016-10-31 13:00:58

标签: python python-3.x

假设我有一个数据项person,其中包含两个属性nameage,这样就可以了;

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

2 个答案:

答案 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

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