出现字长的词典

2024-10-01 19:18:34 发布

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

我的函数将字典作为输入,然后在控制台中显示一个文本条形图。也就是说,它应该“打印”到屏幕上的条形图。图的标签是字典中的键,条形图的长度由键的值决定。你知道吗

例如,使用本词典:

{4:2, 3:5, 10:1, 8:1, 5:1}

情节如下:

keys|values         
----+-------------       
03|#####       
04|##   
05|#  
08|#  
10|#

进行绘图时,标签(键)应按排序顺序显示。每个标签(键)都应以前导零显示,以便每个标签中的位数相同。目前,我的所有功能都是打印包含以下语句的文件的字典:

and then the last assignment ended and everyone was sad

def wordLengthStats(filename):
    file = open(filename, 'r')
    wordcount={}
    for line in file.read().split():
        if line not in wordcount:
            wordcount[line] = 1
        else:
            wordcount[line] += 1
    for k,v in wordcount.items():
        print (k, v)
    return None

def main():

    d = wordLengthStats("sample.txt")
    print("d should be { 3:5, 4:2, 5:1, 8:1, 10:1} ")
    print("d is", d)

if __name__ == '__main__':
    main()

这句话只是一个例子,我正在努力使它,使任何输入应该工作。任何帮助解决这个问题将不胜感激。谢谢!你知道吗


Tags: andinforif字典maindefline
2条回答

试试这个:

from collections import Counter

def wordLengthStats(filename):
    counts=Counter(i.strip() for i in open(filename).readlines())
    for (k,v) in sorted(counts.items(),key=lambda x: x[-1],reverse=True):
        print("{}|{}".format(k.zfill(2),'#'*v))

Counter函数将创建一个字典,其中包含filename中所有行的频率。你知道吗

sorted(counts.items(),key=lambda x: x[-1],reverse=True)表示按counts.items()中的最后一个位置(x[-1])按降序(reverse=True)对项目排序,这就是频率。你知道吗

最后,.zfillstring方法为print语句用前导零填充k。你知道吗

示例:


“假文件”假.txt':

3
3
3
3
3
4
4
5
8
10


>>> wordLengthStats('fake.txt')
03|#####
04|##
05|#
08|#
10|#

在这个例子中counts看起来像:

{'3': 5, '4': 2, '5': 1, '8': 1, '10': 1}

sorted(counts.items(),key=lambda x: x[-1],reverse=True)看起来像(注意最常见的项目是第一个):

[('3', 5), ('4', 2), ('5', 1), ('8', 1), ('10', 1)]

如果您不想按频率排序,而是按键排序,那么请执行sorted(counts.items())

您可以使用列表理解为字典项中的键、值创建元组(键、值*“#”),并对列表进行排序:

d = { 4:2, 3:5, 10:1, 8:1, 5:1}
sorted([(k,'#'*v) for k, v in d.items()])

通过迭代列表中的这些元组并使用以下打印格式,可以获得所需的输出:

for x in sorted([(k,'#'*v) for k, v in d.items()]):
    print "{}|{}".format(x[0], x[1])

要将“0”添加到k<;10:

if x[0] < 10:
    print "0{}|{}".format(x[0], x[1])
else: 
    print "{}|{}".format(x[0], x[1])

相关问题 更多 >

    热门问题