gpt4 book ai didi

python - 分配 'default' 值时检查非顺序列表索引是否存在

转载 作者:太空宇宙 更新时间:2023-11-03 20:20:09 24 4
gpt4 key购买 nike

有一个名为 foo 的列表。 foo预计包含 1 到 6 个元素。如果存在某些索引(特别是 1、3 和 5),那么这些索引的值应填充到字典 bar 中。带 key x , y ,和z 。如果索引不存在,那么这些键应该填充 default .

仅仅迭代列表的每个索引并测试 i 是否等于必要的索引并不像听起来那么简单,因为需要为不存在的索引分配“默认”值。

最初的方法是:

try:
bar['x'] = foo[1]
except IndexError:
bar['x'] = "default"
try:
bar['y'] = foo[3]
except IndexError:
bar['y'] = "default"
try:
bar['z'] = foo[5]
except IndexError:
bar['z'] = "default"

虽然这感觉很丑陋。毕竟,如果第一个 try block 失败,则无需尝试接下来的两个 block ,因此我们知道它们将超出范围。我可以将后续的 try block 嵌套到第一个 try block 中,但这会损害可读性。

在考虑了“最干净”的处理方式后,我决定这样做:

bar['x'] = 'default'
bar['y'] = 'default'
bar['z'] = 'default'

try:
bar['x'] = foo[1]
bar['y'] = foo[3]
bar['z'] = foo[5]
except IndexError:
pass

这里的逻辑是,字典将预先分配所有“默认”值,然后我们可以按顺序覆盖列表索引,如果其中任何一个不存在,则停止尝试分配值并继续(因为如果索引 1 不存在,那么我们就知道 3 和 5 也不存在)。

不过,我有一种挥之不去的感觉,认为有更优化的方法可以做到这一点。

有没有一种更干净、更“Pythonic”的方式来处理这个问题?

最佳答案

我有一个可能更清晰的建议:

从列表 foo = ['a','b','c','d'] 开始,我们可以定义 baz = dict(zip(range(len( foo)),foo))

使用这个字典,我们可以编写如下表达式

bar['x'] = baz.get(1,'default')
bar['y'] = baz.get(3,'default')
bar['z'] = baz.get(5,'default')

关于python - 分配 'default' 值时检查非顺序列表索引是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58215876/

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