[英]Python dictionary counter positions change
所以我試圖計算文本文件中重復次數最多的值。 通過使用Counter
方法,它會返回我正在尋找的內容
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
!
如果你想打印Key
, Value
對,你可以做
for key in reversed(sorted(dictn)):
print("KEY: {0}, VALUE: {1}".format(key, dictn[key]))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.