Python:组合字典值
为了学习python,我正在构建一个生成随机密码的测试程序,实际上我正在使用这段代码列出可能使用的字典:Python:组合字典值,python,Python,为了学习python,我正在构建一个生成随机密码的测试程序,实际上我正在使用这段代码列出可能使用的字典: def symbol_switcher(arg): switcher = { 1: DICTIONARY_LETTERS_UPPER, 2: DICTIONARY_LETTERS_LOWER, 3: DICTIONARY_NUMBERS_DEC, 4: DICTIONARY_SYMBOLS } retur
def symbol_switcher(arg):
switcher = {
1: DICTIONARY_LETTERS_UPPER,
2: DICTIONARY_LETTERS_LOWER,
3: DICTIONARY_NUMBERS_DEC,
4: DICTIONARY_SYMBOLS
}
return switcher.get(arg)
我通过命令行询问用户想要使用什么词典,这样任何组合都可以工作。在切换器中,上述值为1~4,但我需要构建它,使值为1,2,4,8,接受范围1~15内的任何值,例如11(I,2,8)表示第一、第二和第四字典
我如何将用户选择的结果分配给我的字典(使用
变量),而不必执行多个if
(如果),也不必根据可能的组合评估值?
简而言之,python中是否有类似的功能
#assign the resulting join of switcher elements
dictionary_touse = symbol_switcher(11)
编辑:
我实际上使用了这种方法,它可能是错误的,这不是我想要的,如果这有助于:
此方法的问题是,我遇到了以下错误:
TabError:缩进中制表符和空格的使用不一致
编辑:显然记事本++喜欢添加任意制表符而不是空格,这让python很生气,我显示了符号,并用四个空格替换了所有制表符的缩进位置。我想你可以这样做:
def symbol_switcher(arg):
switcher = {
1: DICTIONARY_LETTERS_UPPER,
2: DICTIONARY_LETTERS_LOWER,
3: DICTIONARY_NUMBERS_DEC,
4: DICTIONARY_SYMBOLS
}
return [switcher.get(key) for key in switcher if key & arg]
如果我很了解你的问题,我想你可以:
def symbol_switcher(arg):
switcher = {
1: DICTIONARY_LETTERS_UPPER,
2: DICTIONARY_LETTERS_LOWER,
3: DICTIONARY_NUMBERS_DEC,
4: DICTIONARY_SYMBOLS
}
# return the power p + 1 corresponding to the power decomposition of 2 of arg
# p+1 is related to the numbers in switcher
list_ind = [p+1 for p,v in enumerate(bin(arg)[:1:-1]) if int(v)]
# get a list of dictionnary define in switcher linked to element of list_ind
list_dict = [switcher.get(i) for i in list_ind]
# Create a concatenate dictionnary with all items of all dictionary selected.
return {k: v for d in list_dict for k, v in d.items()}
我会这样编码,将示例位掩码与(此处:常量而不是变量)结合起来,并使用字符串连接操作将其连接起来,给出一个字符串结果:
def symbol_switcher(control):
return "".join([s for i, s in zip((1, 2, 4, 8),
("ABC", "abc", "123", "+-:."))
if i & control])
为什么11对应于第一(1)、第二(2)和第四(8)?因为1+2+8=11?那么函数应该如何返回多个dict?是否应该将它们包装在一个列表中,如
[字典字母上方,字典字母下方,字典符号]
?如果您将字典重构为使用0-3而不是1-4,那么您可以更轻松地使用位篡改。@guidot所有大写字母都是字符串常量,不dictionaries@Ev.Kounis是的,枚举和组合多个值是一种惯例,想象一下用一个DB而不是存储4个字段true/false您可以用一个字段来管理它,想象一下如果您有多个标志可以是true/false。该系统有助于节省数据库空间,并允许您以任何可能的组合方式组合标志,您只需每隔一个值将该值加倍。1、2、3和4的位操作?这看起来并不像预期的那样工作。如果键是0x1、0x2、0b11、0b100,它会更像工作吗?不,这看起来像是你在故意混淆阅读代码的人。你为什么要把十六进制数和二进制数混在一起?