你如何按字长排序字典?

时间:2015-11-18 17:43:35

标签: python

目前,我正在尝试从文本文件中读取“快速棕色狐狸跳过懒惰的棕色狗背上”这样的词语,并按字长和字数组织。

所以输出应该是:

1 The

1 fox

1 the

1 back

1 lazy

1 over

2 brown

1 dog’s

1 quick

1 jumped

我确实检查过很多像#{3}}这样的stackoverflow问题,我猜我错过了,或者我不明白如何使用它。我是python的初学者。

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

 from collections import Counter
 file = open("text.txt","r")

 #read the file & split words 
 wordcount =Counter(file.read().split())

 #printing word count 
 for item in wordcount.items():

     print ("{}\t{}".format(*item))

有人能帮我知道我做错了什么吗?

4 个答案:

答案 0 :(得分:1)

尝试类似 -

from collections import Counter
import re
#Identify each word using regex
words = re.findall(r'\w+', open(r"D:\test.txt").read())
#Find counts
data= Counter(words).most_common()
data = sorted(data,key=lambda x:x[0])
print data

打印 -

[('The', 1), ('back', 1), ('brown', 2), ('dog', 1), ('fox', 1), ('jumped', 1), ('lazy', 1), ('over', 1), ('quick', 1), ('s', 1), ('the', 1)]

或者尝试分裂 -

from collections import Counter
import re
words=open(r"D:\test.txt").read().split(" ")
data= Counter(words).most_common()
data = sorted(data,key=lambda x:x[1])
print data

打印 -

[('lazy', 1), ('jumped', 1), ('over', 1), ('fox', 1), ('back', 1), ('quick', 1), ('The', 1), ('the', 1), ('dog's', 1), ('brown', 2)]

答案 1 :(得分:1)

正如我的评论所说,你不能sort dict因为dicts没有被排序(它与键/值对如何被散列以允许O(1)值获得有关)。

您可以改为遍历已排序的dict.items(),因为.items()会返回一个元组列表,并且列表是有序的。

>>> s = "The quick brown fox jumped over the lazy brown dog’s back"

>>> from collections import Counter
>>> wordcount = Counter(s.split())
>>> wordcount
Counter({'brown': 2, 'back': 1, 'quick': 1, 'The': 1, 'over': 1, 'dog’s': 1, 'jumped': 1, 'fox': 1, 'the': 1, 'lazy': 1})
>>> for key,val in sorted(wordcount.items(),key = lambda pair: len(pair[0])):
    print(str(val),key)


1 The
1 fox
1 the
1 back
1 over
1 lazy
1 quick
2 brown
1 dog’s
1 jumped

使用内置sorted(list,key=somefunction)函数,您可以按键wordcount.items()返回的列表排序(自pair[0]pair == (key,value)访问) / p>

答案 2 :(得分:1)

首先,必须将字典转换为元组列表,然后对其进行排序并打印/返回:

https://pbs.twimg.com/profile_images/378812345851234567/Ay2SHEYz_normal.png

答案 3 :(得分:0)

[编辑]我重读了这篇文章并发现这并不是你想要的。见其他人的答案。

字典类似于列表,但是使用字符串而不是整数作为凹凸。如果您想要存储键值结构的数据,例如" Mom":39," Kevin":12," Sally":14,它们非常有用。 Dictionarys不可排序。

根据您的需要,可以使用简单的字符串列表。 (您只需在列表中调用sort()即可对其进行排序:

words = file.read().split() #that is a list
words.sort()