【问题标题】:generate list from values of certain field in list of objects从对象列表中某个字段的值生成列表
【发布时间】:2015-08-13 18:07:22
【问题描述】:

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

给定对象列表:

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

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

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

内置的filter() 函数似乎很接近,但它会自己返回整个对象。

我想要一个干净的单行解决方案,例如:

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

对不起,我知道那是 c 语法。

【问题讨论】:

  • 我没有使用字典,但我会看看我是否可以调整 Q 的答案。
  • 一行.. list comprehension 的一个很好的用例
  • 我明白了。 maplist comprehensions 对我来说都是新手。很高兴被介绍!

标签: python


【解决方案1】:

只需遍历您的 dicts 列表并选择 name 值并将它们放入列表中。

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

y = [y['name'] for y in x]

print(y)

【讨论】:

    【解决方案2】:

    只需将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]
    

    【讨论】:

      【解决方案3】:

      使用列表理解方法,您会得到:

      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

      【讨论】:

      • 如果您是一位经验丰富的程序员,正在检查 Python,您可能会喜欢这本书 Dive into Python (www.diveintopython.net)。
      猜你喜欢
      • 2020-02-18
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      • 2017-07-01
      • 2017-06-08
      • 2013-07-22
      • 1970-01-01
      • 2021-11-02
      相关资源
      最近更新 更多