我想知道一个词在twitter上出现的频率。我使用twitterapi从twitter下载了500条tweets,并制作了一个字典,其中以单词频率为键,并将与该频率对应的所有单词列为值。在
我一直认为字典总是无序的,所以我想用某种方式订购我的字典。但当我看的时候,它已经按从低到高的顺序排列了。这怎么可能?在
这是我使用的代码:
def countWords(cleanDict):
reverseDict = {}
FreqDict = {}
count = 1
for tweet_id in cleanDict:
tweet = cleanDict[tweet_id]
wordList = tweet.split()
for word in wordList: # Creates a dictionary with words as keys and
# frequencies as values
if word in reverseDict:
reverseDict[word] += 1
else:
reverseDict[word] = 1
for word in reverseDict: # Creates a dictionary with frequencies as keys and
# lists of words as values
if reverseDict[word] in FreqDict:
temp = FreqDict[freqDict[word]]
temp.append(word)
FreqDict[freqDict[word]] = temp
else:
FreqDict[freqDict[word]] = [word]
return FreqDict
countWords(cleanDict) # cleanDict is a dictionary with tweet ID's as keys and
# tweets as values
别误会,我的字典已经订成这样真是太好了,但是怎么订呢? 这是我加字典的方式还是什么?在
编辑
我试着用整数作为键,用一些字符串作为值。我没有按特定的顺序添加键,但当我打印这本词典时,它又是按键排序的。 这是python经常做的吗?在
可能纯粹是运气。如果dict中有更多的对象需要调整大小,或者对象不是一个接一个地创建(因此它们的id/内存地址变化更大),则可能会发生变化。在
如果您需要订单,只需使用
collections.OrderedDict
并保证它。或者对任务使用collections.Counter
,这是为这种计数而设计的。在“无序”是一个用词不当的词,它们是由实现来任意排序的。具体地说,可以保证顺序是任意的,但是是一致的(在python解释器的单个实例中[1])。在
至于为什么会有这样的行为-您使用
int
s作为密钥。在cPython中,int
的hash
就是它自己。因此:将始终以数字顺序显示键,这要感谢实现细节。但是这个:
^{pr2}$不会(很可能)按字母顺序打印出来。在
[1]字符串哈希行为会因解释器实例而异,具体取决于您运行的python版本。Python3将“随机种子”引入到字符串密钥哈希中,作为某种安全措施。您可以使用
python -R
在python2.7上启用该行为。在相关问题 更多 >
编程相关推荐