按键筛选字典

2024-09-25 02:24:49 发布

您现在位置:Python中文网/ 问答频道 /正文

输入

dict = {
    "samp1": "x",
    "samp2": "x",
    "exp1": "x"
}

ex = dict((k, v) for k, v in dict.items() if k in samp+str(range(1,10)))

预期产量

ex = {
    "samp1":"x",
    "samp2":"x"
}

我的代码在这一行str(range(1,10))中出错

你怎么能这样做if k in samp1 samp2 samp3...samp10


Tags: 代码inforifitemsrangedictex
3条回答

请尝试以下操作:

ex = {}
for obj in dict:
    if obj.startswith('samp'):
        ex[obj] = dict[obj]
print(ex)

我建议在这里使用re.match检查key是否以指定的模式开始:

import re
{k:v for k, v in d.items() if re.match(r'^samp[0-9]', k)}
# {'samp1': 'x', 'samp2': 'x'}

或者,您可以使用startswith,也可以使用tuple

m = tuple(['samp'+str(i) for i in range(10)],)
{k:v for k, v in d.items() if k.startswith(m)}
# {'samp1': 'x', 'samp2': 'x'}

为了指出代码中的错误,我尝试修改min。尝试一下(使用f-stringdict-comprehension):

dict={
    "samp1":"x",
    "samp2":"x",
    "exp1":"x"
}
li = [F"samp{i}" for i in range(1,11)]
ex = {k:v for k, v in dict.items() if k in li}
print(ex)

输出:

{'samp1': 'x', 'samp2': 'x'}

另一个(感谢@OlvinRoght的isDecimal):

dict = {
    "samp1":"x",
    "samp2":"x",
    "samp12":"x",
    "samp":"x",
    "sampxyz":"x",
    "exp1":"x"
}
ex = {k:v for k, v in dict.items() if k.startswith("samp") and k[4:].isdecimal() and (0 < int(k[4:]) <= 10) }
print(ex)

输出:

{'samp1': 'x', 'samp2': 'x'}

相关问题 更多 >