如何从字典输出值而不将其作为列表打印出来?

时间:2015-09-30 10:43:29

标签: python dictionary

我被分配到lexiographicaly组合ana克。

以下是其中一个测试用例:

输入: eat tea tan ate nat bat

输出:

ate eat tea bat nat tan

但是,我继续得到以下输出,其中字谜被封装在列表中,并且每行打印的顺序每次都不同:

['ate', 'eat', 'tea'] ['nat', 'tan'] ['bat']

['nat', 'tan'] ['bat'] ['ate', 'eat', 'tea']

['ate', 'eat', 'tea'] ['bat'] ['nat', 'tan']

如何解决此问题,以便输出而不会在列表中加盖,并且可能以正确的顺序排列?

这是我到目前为止所做的:

import sys
from collections import *
def ComputeAnagrams(string):
    d = defaultdict(list)
    for word in string:
        key = ''.join(sorted(word))
        d[key].append(word)
    return d

def main():
    for string in sys.stdin:
        stringList = string.split()
        if len(stringList) == 0:
            break
        d = ComputeAnagrams(stringList)
        for key,anagrams in d.items():
            if len(anagrams) >=1:
                print(sorted(anagrams))
        print ('')
main()

注意:运行此程序的机器从stdin / keyboard读取输入并将输出打印到控制台(stdout)。

1 个答案:

答案 0 :(得分:1)

我认为问题是 -

print(sorted(''.join(anagrams)))

在将列表加入字符串后使用sorted,在这种情况下,sorted会按排序顺序返回一个字符列表(我猜这是你得到的当前输出)。

如果您希望元素按排序顺序排序,则应在anagrams列表中使用,而不是在加入后使用字符串。示例 -

print(', '.join(sorted(anagrams)))

我也使用', '来加入字符串,以便使用,作为分隔符,否则输出将是所有字符串在一起,中间没有任何空格,如果你愿意,你可以使用你想要的任何其他分隔符。

演示 -

经过上述变更后 -

输入 -

eat tea tan ate nat bat

输出 -

bat
ate, eat, tea
nat, tan