为什么我的字典是用python排序的?

2024-10-01 00:23:01 发布

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

我想知道一个词在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经常做的吗?在


Tags: andinfordictionary字典aswithkeys
2条回答

可能纯粹是运气。如果dict中有更多的对象需要调整大小,或者对象不是一个接一个地创建(因此它们的id/内存地址变化更大),则可能会发生变化。在

如果您需要订单,只需使用collections.OrderedDict并保证它。或者对任务使用collections.Counter,这是为这种计数而设计的。在

“无序”是一个用词不当的词,它们是由实现来任意排序的。具体地说,可以保证顺序是任意的,但是是一致的(在python解释器的单个实例中[1])。在

至于为什么会有这样的行为-您使用ints作为密钥。在cPython中,inthash就是它自己。因此:

d = dict(zip(range(100),' '*100))
print(d)

将始终以数字顺序显示键,这要感谢实现细节。但是这个:

^{pr2}$

不会(很可能)按字母顺序打印出来。在


[1]字符串哈希行为会因解释器实例而异,具体取决于您运行的python版本。Python3将“随机种子”引入到字符串密钥哈希中,作为某种安全措施。您可以使用python -R在python2.7上启用该行为。在

相关问题 更多 >