python - python:从字典中提取多个键
问题描述
拜托,我想要一种更简单的方法来从这本字典的键中提取每个第一个元素:
s = [((3, 6), 9.0), ((1, 6), 8.0), ((3, 8), 8.0), ((3, 7), 7.0), ((0, 6), 7.0), ((1, 8), 7.0), ((0, 8), 6.0), ((2, 4), 6.0), ((1, 7), 6.0), ((2, 6), 5.0), ((2, 9), 5.0), ((0, 7), 5.0), ((3, 5), 5.0), ((2, 8), 4.0), ((1, 5), 4.0), ((0, 4), 4.0), ((3, 2), 4.0), ((2, 3), 4.0), ((2, 1), 3.0), ((1, 2), 3.0), ((2, 7), 3.0), ((1, 4), 3.0), ((0, 5), 3.0), ((0, 9), 3.0), ((3, 0), 2.0), ((0, 3), 2.0), ((2, 0), 2.0), ((3, 4), 2.0), ((0, 2), 2.0), ((1, 9), 2.0), ((1, 3), 1.0), ((2, 5), 1.0), ((3, 9), 1.0), ((1, 0), 1.0), ((0, 1), 1.0), ((3, 1), 1.0), ((3, 3), 0.0), ((1, 1), 0.0), ((0, 0), 0.0), ((2, 2), 0.0)]
我想得到这样的东西:
[3, 1, 3, 3, 0, 1, 0, 2, 1, 2, 2, 0, 3, 2, 1, 0, 3, 2, 2, 1, 2, 1, 0, 0, 3, 0, 2, 3, 0, 1, 1, 2, 3, 1, 0, 3, 3, 1, 0, 2]
这就是我所做的:
l = [a[0][0] for a in s]
我想要一种有效的方式来做到这一点
解决方案
您s
是嵌套元组的列表。dict
但是您可以通过将它传递给dict
构造函数来轻松地从中创建一个。但是如果你真的有一个dict
,你可以使用 . 从每个键元组中有效地提取第一项operator.itemgetter
。
from operator import itemgetter
s = [
((3, 6), 9.0), ((1, 6), 8.0), ((3, 8), 8.0), ((3, 7), 7.0), ((0, 6), 7.0), ((1, 8), 7.0),
((0, 8), 6.0), ((2, 4), 6.0), ((1, 7), 6.0), ((2, 6), 5.0), ((2, 9), 5.0), ((0, 7), 5.0),
((3, 5), 5.0), ((2, 8), 4.0), ((1, 5), 4.0), ((0, 4), 4.0), ((3, 2), 4.0), ((2, 3), 4.0),
((2, 1), 3.0), ((1, 2), 3.0), ((2, 7), 3.0), ((1, 4), 3.0), ((0, 5), 3.0), ((0, 9), 3.0),
((3, 0), 2.0), ((0, 3), 2.0), ((2, 0), 2.0), ((3, 4), 2.0), ((0, 2), 2.0), ((1, 9), 2.0),
((1, 3), 1.0), ((2, 5), 1.0), ((3, 9), 1.0), ((1, 0), 1.0), ((0, 1), 1.0), ((3, 1), 1.0),
((3, 3), 0.0), ((1, 1), 0.0), ((0, 0), 0.0), ((2, 2), 0.0)
]
d = dict(s)
print(d)
a = list(map(itemgetter(0), d))
print(a)
输出
{(3, 6): 9.0, (1, 6): 8.0, (3, 8): 8.0, (3, 7): 7.0, (0, 6): 7.0, (1, 8): 7.0, (0, 8): 6.0, (2, 4): 6.0, (1, 7): 6.0, (2, 6): 5.0, (2, 9): 5.0, (0, 7): 5.0, (3, 5): 5.0, (2, 8): 4.0, (1, 5): 4.0, (0, 4): 4.0, (3, 2): 4.0, (2, 3): 4.0, (2, 1): 3.0, (1, 2): 3.0, (2, 7): 3.0, (1, 4): 3.0, (0, 5): 3.0, (0, 9): 3.0, (3, 0): 2.0, (0, 3): 2.0, (2, 0): 2.0, (3, 4): 2.0, (0, 2): 2.0, (1, 9): 2.0, (1, 3): 1.0, (2, 5): 1.0, (3, 9): 1.0, (1, 0): 1.0, (0, 1): 1.0, (3, 1): 1.0, (3, 3): 0.0, (1, 1): 0.0, (0, 0): 0.0, (2, 2): 0.0}
[3, 1, 3, 3, 0, 1, 0, 2, 1, 2, 2, 0, 3, 2, 1, 0, 3, 2, 2, 1, 2, 1, 0, 0, 3, 0, 2, 3, 0, 1, 1, 2, 3, 1, 0, 3, 3, 1, 0, 2]
但是,除非您使用 Python 3.6+,否则您可能不应该这样a
做,因为在早期版本中,字典不保留插入顺序,因此不能保证s
.
如果您实际上没有dict
,但您只有该s
列表,那么您的代码
l = [a[0][0] for a in s]
很好。
推荐阅读
- database - 如何使用带有过滤器的laravel分页
- android-fragments - 我无法将 searchView 与多个片段一起使用
- dart - Flutter how to send multiple files to http post
- xml - XSLT - 在 for-each 循环中检查两个节点是否相等
- scala - 如何通过列上的组合并行化 apache spark 中数据帧的处理
- python - 如何在 Python 中找到 5 个变量的中位数?
- chart.js - chart.js 饼图内置交互
- sql-server - SQL Server 2017 中的时态表是否支持外键?
- jaws-screen-reader - 加载新内容时,让 JAWS 以编程方式读取页面标题
- javascript - 为什么这个函数会在 javascript 中引发“严格”错误?