gpt4 book ai didi

python将列表值与字典列表中的键进行比较

转载 作者:行者123 更新时间:2023-11-30 22:14:40 25 4
gpt4 key购买 nike

我有一个字典 a 列表和一个列表 b ,如下所示。 len(b) 并不总是 4。它可能是 2 或 3。我将 b 中的值与 b 中每个字典中的键进行了比较。我得到了所示的结果,其长度应该正确,但顺序不符合预期。

我的两个问题是:

  1. 结果未按顺序打印。即不取决于我的列表中哪个值排在第一位
  2. 有更好的比较方法吗? (我确信有)因为 len(b) 并不总是 4。它可能会更小。

这是我所拥有的

a = [{0: 0, 1: 1, 2: 7, 3: 0}, {0: 0, 1: 0, 2: 12, 3: 0}, {0: 5, 1: 0, 2: 8, 3: 0}]
b = [2, 0, 1, 3]
c = []
for i in a:
x = []
for k, v in i.items():
if k == b[0]:
x.append(v)
if k == b[1]:
x.append(v)
if k == b[2]:
x.append(v)
if k == b[3]:
x.append(v)
c.append(x)
print(c)

我的结果是

[[0,1,7,0],[0,0,12,0],[5,0,8,0]]

如果您注意到,对于 b = 2b[0]a[1] 的结果正确是 7,但它尽管 2 是 b 中的第一项,但在我的最终结果中,它位于 0 和 1 之后。

谢谢

最佳答案

您可以使用列表理解:

res = [[d[i] for i in b] for d in a]

print(res)

[[7, 0, 1, 0], [12, 0, 0, 0], [8, 5, 0, 0]]

要了解其工作原理,有时编写完整的嵌套 for 循环会有所帮助:

res = []
for d in a:
res_int = []
for i in b:
res_int.append(d[i])
res.append(res_int)

函数式方法也是可能的:

res = [list(map(d.get, b)) for d in a]

关于python将列表值与字典列表中的键进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50438809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com