为什么我的字典在python中排序?

 stong_lxm 发布于 2023-01-17 10:58

我想知道Twitter中的推文中出现一个单词的频率.我使用Twitter API从twitter下载了500条推文,并制作了一个字典,其中包含单词频率作为键,以及与该频率对应的所有单词列表作为值.

我一直以为字典总是无序的,所以我想以某种方式订购我的字典.但是当我看着它时,它已经被键从低到高排序.这怎么可能?

这是我使用的代码:

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总能做到的吗?

1 个回答
  • "无序"是用词不当 - 它们是任意排序的,留给实施.具体来说,保证顺序是任意的,但是一致的(在python解释器的单个实例中[1]).

    至于为什么你会得到这种行为 - 你使用ints作为你的钥匙.碰巧在cPython中,hasha int本身就是这样.这样:

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

    由于实现细节,将始终以数字顺序出现密钥.但是这个:

    d = dict((L, i) for i, L in enumerate('abcdefg'))
    print(d)
    

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


    [1]字符串散列行为可能因解释器实例而异,具体取决于您正在运行的python版本.Python 3为字符串键的散列引入了"随机种子"作为安全措施.您可以在python 2.7上启用该行为python -R.

    2023-01-17 11:01 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有