python:从字典中提取uple键

2024-04-26 18:19:11 发布

您现在位置: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]

我想要一个有效的方法


Tags: 方法in元素for字典
1条回答
网友
1楼 · 发布于 2024-04-26 18:19:11

您的s是嵌套元组的列表。但是通过将它传递给dict构造函数,您可以很容易地从它创建一个dict。但是如果您确实有一个dict,那么可以使用^{}从每个键元组有效地提取第一项。你知道吗

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]

但是,您可能不应该这样做,除非您使用的是python3.6+,因为在早期版本中,字典不保留插入顺序,因此不能保证a中的项与s中的项的顺序相同。你知道吗

如果您实际上没有dict,但只有s列表,那么您的代码

l = [a[0][0] for a in s]

很好。你知道吗

相关问题 更多 >