簡體   English   中英

Python字典計數器位置變化

[英]Python dictionary counter positions change

所以我試圖計算文本文件中重復次數最多的值。 通過使用Counter方法,它會返回我正在尋找的內容

文件.txt

12334
99965
99965
44144
99965
00000
44144

腳本文件

pArray=[]
with open("file.txt") as my_file:
        for line in my_file:
             pArray.append((line.split('\n'))[0])
        dictn = Counter(pArray)
        print(dictn)
        for key, value in dictn.items():
                print("KEY",key)    
                print("VALUE",value)
        print(dictn)

輸出

Counter({'99965': 3, '44144': 2, '12334': 1, '00000': 1})
KEY 12334
VALUE 1
KEY 99965
VALUE 3
KEY 44144
VALUE 2
KEY 00000
VALUE 1
['12334', '99965', '44144', '00000']

但是正如您所看到的,最終數組的輸出與字典的順序不同
value應按降序排列)

我期待像這樣的輸出

 ['99965', '44144', '12334', '00000']

我也試過list(dictn.keys())但我得到了相同的輸出:/
為什么訂單會發生變化,我該如何解決?

文檔中,我們看到Counter對象:是“無序集合”——很像dictionaries (實際上它們是一個子類)。 所以這意味着迭代.items()不會按大小順序給出元素。

但是,我們可以簡單地使用.most_common返回一個元組列表- 每個包含一個元素及其計數。 最重要的是它是有序的。

所以我們需要做的就是使用list-comprehension來提取返回列表中每個元組的第一個元素。 這可以通過以下方式完成:

[t[0] for t in dictn.most_common()]

這給了:

['99965', '44144', '12334', '00000']

但也可以給出以下內容,因為'12334''00000'的計數相同。 由於字典(和計數器)工作方式的性質,這是不可避免的。 但如果這很重要,請告訴我,我可以更新答案。

['99965', '44144', '00000', '12334']

請注意,並非所有代碼都需要在with語句中,一旦創建了pArray ,就可以退出with語句。 此外,基本的 Python 使用lists而不是arrays

如果你想打印KeyValue對,你可以做

for key in reversed(sorted(dictn)):
    print("KEY: {0}, VALUE: {1}".format(key, dictn[key]))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM