如何列出dict.items()中所有可能的3个字母组合?

时间:2017-11-10 18:31:58

标签: python python-3.x dictionary

我正在制作一个连续的信件检查器,我遇到了这个问题,它应该从键盘返回所有三重字母组合,但是,我不明白我在做什么我做错了最后一部分以及我是怎么做的可以使它工作?我只能在dict中打印key()而不是items()的3个字母组合。我正在寻找的结果是'items()'中所有可能的3个字母组合将打印在列表中。

keyboard = {'line1':'qwertyuiop',
            'line2':'asdfghjkl',
                'line3':'zxcvbnm'}

def consequ(key):
    a = []
    for each_key in key:
        for i in range(len(key[each_key])-2):
            a.append(each_key[i:i+3])
    return a

我通过编写

来调用该函数
consequ(keyboard)

输出由以下代码给出:

['lin','ine','ne1','e1','1','','','','lin','ine','ne2','e2',' 2','','','lin','ine','ne3','e3','3']

想要的输出是:

['qwe','wer','ert','rty','tyu','yui','uio','iop','asd','sdf','dfg','fgh ','ghj','hjk','jkl','zxc','xcv','cvb','vbn','bnm']

1 个答案:

答案 0 :(得分:2)

如果要存储键盘的所有这些组合,则必须迭代字典的。但你写了:

a.append(each_key[i:i+3])
#        ^ key of the dictionary

所以你必须把它重写为:

def consequ(key):
    a = []
    for line in key.values():
        for i in range(len(line)-2):
            a.append(line[i:i+3])
    return a

或更优雅:

def consequ(key):
    a = []
    for line in key.values():
        a += [line[i:i+3] for i in range(len(line)-2)]
    return a

这些产生:

>>> consequ(keyboard)
['zxc', 'xcv', 'cvb', 'vbn', 'bnm', 'asd', 'sdf', 'dfg', 'fgh', 'ghj', 'hjk', 'jkl', 'qwe', 'wer', 'ert', 'rty', 'tyu', 'yui', 'uio', 'iop']

请注意,大多数Python解释器都有无序词典,因此行的顺序可能不同。