我创建了一个字典,并在其中循环创建一个最终的,更小的字典。我已经成功地做到了这一点,但它很漫长而且很麻烦。在我看来,我应该能够使用某种通配符循环。我的问题是我正在使用用户输入,但有些键可以是a,a_1,a_2,... a_5。并非所有选项都有5个可选项,有些只有一个。请善待,我是编程新手。我试过fnmatch()函数无济于事。
check_parm=yae_list.values()
new_dict={}
x=int(len(check_parm))
while x>0:
element=check_parm[x-1]
if element in yae_atom_parms_dic:
new_dict[element]=yae_atom_parms_dic.get(element)
elif not yae_atom_parms_dic.get(element):
element_1=element+'_1'
if element_1 in yae_atom_parms_dic:
new_dict[element_1]=yae_atom_parms_dic.get(element_1)
element_2=element+'_2'
if element_2 in yae_atom_parms_dic:
new_dict[element_2]=yae_atom_parms_dic.get(element_2)
element_3=element+'_3'
if element_3 in yae_atom_parms_dic:
new_dict[element_3]=yae_atom_parms_dic.get(element_3)
element_4=element+'_4'
if element_4 in yae_atom_parms_dic:
new_dict[element_4]=yae_atom_parms_dic.get(element_4)
element_5=element+'_5'
if element_5 in yae_atom_parms_dic:
new_dict[element_5]=yae_atom_parms_dic.get(element_5)
if element_1 or element_2 or element_3 or element_4 or element_5:
print("Which one do you want?")
print new_dict
x=x-1
这是我想要的,给出输出:
Which one do you want?
{'C_1': (6, 4, 1, 2, 's', -21.4, 1.625, 0, 1, 0), 'C_2': (6, 4, 1, 2, 'p', -11.4,1.625,)}
答案 0 :(得分:0)
可以尝试这样的事情:
import re
constant_keys = "|".join(map(re.escape, yae_list.values()))
re_expression = re.compile("^(%s)(_[1-5])?$" % constant_keys)
allowed_keys = filter(re_expression.match, yea_atom_parms_dic.keys())
new_dict = {key: yea_atom_parms_dic[key] for key in allowed_keys}
print new_dict
在这个中,首先通过将所有yae_list键连接起来构造正则表达式字符(并转义它们)然后你将这样的表达式放入^(%s)(_ [1-5])?这意味着当键与|中的任何键相等时,将匹配匹配序列可选地带有下划线和1到5之间的数字。接下来,您可以过滤允许的键并使用它们,您可以使用allowed_keys列表中的键创建新的dict。
示例:
如果您有密钥:“C”,“a”和“new”,那么正则表达式将如下所示:^(C|a|new)(_[1-5])?$