提取列表中嵌入的字典项

新手上路,请多包涵

假设我有以下字典列表

t = [{'a': 1.0, 'b': 2.0},
     {'a': 3.0, 'b': 4.0},
     {'a': 5.0, 'b': 6.0},
     {'a': 7.0, 'b': 9.0},
     {'a': 9.0, 'b': 0.0}]

是否有一种有效的方法来提取字典中包含的所有值,字典键值为 a

到目前为止,我提出了以下解决方案

x = []
for j in t:
    x.append(j['a'])

但是,我不喜欢遍历项目,并且正在寻找一种更好的方法来实现这一目标。

原文由 Eric B 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 468
2 个回答

您可以使用列表理解:

 t = [{'a': 1.0, 'b': 2.0},
 {'a': 3.0, 'b': 4.0},
 {'a': 5.0, 'b': 6.0},
 {'a': 7.0, 'b': 9.0},
 {'a': 9.0, 'b': 0.0}]
new_list = [i["a"] for i in t]

输出:

 [1.0, 3.0, 5.0, 7.0, 9.0]

由于此解决方案使用 for 循环,因此您可以使用 map 代替:

 x = list(map(lambda x: x["a"], t))

输出:

 [1.0, 3.0, 5.0, 7.0, 9.0]

在性能方面,您更喜欢使用列表综合解决方案而不是地图解决方案。

 >>> timeit('new_list = [i["a"] for i in t]', setup='from __main__ import t', number=10000000)
4.318223718035199

>>> timeit('x = list(map(lambda x: x["a"], t))', setup='from __main__ import t', number=10000000)
16.243124993163093

def temp(p):
    return p['a']

>>> timeit('x = list(map(temp, t))', setup='from __main__ import t, temp', number=10000000)
16.048683850689343

使用 lambda 或常规函数时略有不同;然而,推导执行需要 14 的时间。

原文由 Ajax1234 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用 itemgetter

 from operator import itemgetter

t = [{'a': 1.0, 'b': 2.0},
     {'a': 3.0, 'b': 4.0},
     {'a': 5.0, 'b': 6.0},
     {'a': 7.0, 'b': 9.0},
     {'a': 9.0, 'b': 0.0}]

print map(itemgetter('a'), t)

结果:

 [1.0, 3.0, 5.0, 7.0, 9.0]

原文由 Don 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题