从对象列表

时间:2015-05-31 04:37:51

标签: python

如何生成列表中某个对象字段的值列表?

给出对象列表:

[ {name: "Joe", group: 1}, {name: "Kirk", group: 2}, {name: "Bob", group: 1}]

我想生成名称字段值的列表:

["Joe", "Kirk", "Bob"]

内置的filter()函数似乎已接近,但它将返回整个对象本身。

我想要一个简洁的一线解决方案,例如:

filterLikeFunc(function(obj){return obj.name}, mylist)

抱歉,我知道这是一种语法。

3 个答案:

答案 0 :(得分:1)

只需将filter内置函数替换为map内置函数。

并使用get函数,在没有该特定键的情况下不会为您提供密钥错误,以获取name密钥的值。

data = [{'name': "Joe", 'group': 1}, {'name': "Kirk", 'group': 2}, {'name': "Bob", 'group': 1}]

print map(lambda x: x.get('name'), data)

在Python 3.x

print(list(map(lambda x: x.get('name'), data)))

结果:

['Joe', 'Kirk', 'Bob']

使用List Comprehension

print [each.get('name') for each in data]

答案 1 :(得分:1)

使用列表理解方法:

objects = [{'group': 1, 'name': 'Joe'}, {'group': 2, 'name': 'Kirk'}, {'group': 1, 'name': 'Bob'}]
names = [i["name"] for i in objects]

有关列表推导的详细介绍,请参阅https://docs.python.org/2/tutorial/datastructures.html

答案 2 :(得分:1)

只需遍历您的dicts列表并选择x = [ {'name': "Joe", 'group': 1}, {'name': "Kirk", 'group': 2}, {'name': "Bob", 'group': 1}] y = [y['name'] for y in x] print(y) 值并将其放入列表中。

$date = $interval1->format('%y years %m months and %d days %H hours, %i min and %s sec ');

$replaced = false;
while ($replaced)
{
    $date = preg_replace('/^(0 [a-z]+)/', '', ltrim($date, " ,and"), 1, $replaced);
}