我有一個包含許多列和行的 CSV 檔案,我想從一個具有重復項的特定行(代碼中顯示的第 12 行)創建一個字典。我設法做到了這一點,但是,我無法弄清楚如何對其進行排序。我嘗試在創建字典之前和之后對其進行排序。我通過 VSCode 使用 python。
這是我的代碼:
import csv
with open("FILENAME", newline="", encoding="iso-8859-1") as csvfile:
reader = csv.reader(csvfile, delimiter=";")
next(reader)
species_count ={}
for row in reader:
species = row[12]
species_count[species] = species_count.get(species,0) 1
for num in species_count:
print(f"{num}: {species_count[num]}")
當前結果示例:
A: 5922
C: 5837
D: 6136
B: 12
E: 1
等等。
有沒有簡單的方法來做到這一點?任何幫助表示贊賞!(我是初學者)
編輯:我想按字母順序排序,所以:
A: 5922
B: 12
C: 5837
etc
uj5u.com熱心網友回復:
對字典中的元素進行排序
你的代碼很不錯,你只需要替換最后的顯示回圈
for num in species_count:
在 的內容的排序版本上回圈species_count。
方便地,使用內置函式可以輕松地獲得一個集合的排序版本sorted。您可以對字典的鍵串列進行排序,也可以直接對對(鍵,值)的串列進行排序。
# version 1
for num in sorted(species_count):
print(f"{num}: {species_count[num]}")
# version 2
for s,c in sorted(species_count.items()):
print(f'{s}: {c}')
我更喜歡第 2 版,盡管這是一個品味問題。它們幾乎(但不完全)等效。
對您的代碼的附加注釋
使用 collections.Counter
您d[k] = d.get(k,0) 1在回圈中使用 來構建計數字典效果很好。然而,由于這是一件非常經典的事情并且在很多情況下都非常有用,因此有一個dictin python的子類可以為您處理所有這些邏輯。子類被呼叫Counter并在 module 中找到collections。使用該類,可以在一行簡單的代碼中構建計數字典:
from collections import Counter
species_count = Counter(row[12] for row in reader)
打開和關閉檔案
with像您一樣使用塊的最大優點是它會為您關閉檔案。當with塊結束時檔案被關閉。在我看來,您應該在with完成讀取檔案后立即關閉該塊。因此,最終的顯示回圈for num in sorted(species_count):應該在with塊之外。
最終代碼
import csv
from collections import Counter
with open("FILENAME", newline="", encoding="iso-8859-1") as csvfile:
reader = csv.reader(csvfile, delimiter=";")
next(reader)
species_count = Counter(row[12] for row in reader)
for s,c in sorted(species_count.items()):
print(f'{s}: {c}')
uj5u.com熱心網友回復:
這是來源
lambda 函式是為了縮短 for 回圈。x 是指字典的專案。字典項包含鍵和值。鍵是索引 0 x[0] 處的 x,而 x[1] 指的是值。因為我們要對字典的鍵進行排序。
sorted 是內置函式,您可以使用 sorted 按字母順序對字典進行排序。
sortedDict = dict(sorted(species_count.items(), key = lambda x: x[0]))
print(sortedDict)
結果
{'A': 5922, 'B': 12, 'C': 5837, 'D': 6136, 'E': 1}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/359283.html
