我有一個 CSV 檔案 ( staff),如下所示:
id, name, title
1, Steve, Customer Service Manager
2, Martin, Warehouse Operator
3, Jonathan, Backend Developer
我想將其決議為以下格式:
staff = {
'1':[{'name':'Steve'}, {'title':'Customer Service Manager'}],
'2':[{'name':'Martin'}, {'title':'Warehouse Operator'}],
'3':[{'name':'Jonathan'}, {'title':'Backend Developer'}]
}
但據我所知,csvreaderandpandas庫不支持這種型別的操作。有沒有一種干凈的方法可以做到這一點,也許是理解?
uj5u.com熱心網友回復:
我認為DictReader可能是一個很好的解決方案:
with open("sample.csv", "r") as f_csv:
reader = csv.DictReader(f_csv)
data = [row for row in reader]
staff = {r["id"]: [{k: v} for k, v in r.items() if "id" not in k] for r in data}
print(staff)
輸出:
{'1': [{'name': 'Steve'}, {'title': 'Customer Service Manager'}], '2': [{'name': 'Martin'}, {'title': 'Warehouse Operator'}], '3': [{'name': 'Jonathan'}, {'title': 'Backend Developer'}]}
筆記
我將 csv 修改為沒有逗號和空格來分隔欄位。此外,這允許任意數量的其他欄位,而不是僅對此處顯示的兩個欄位進行硬編碼。這也結合了 dict 和 list 理解。
uj5u.com熱心網友回復:
我創建了一個 CSV 檔案并復制了您共享的確切資料,以下代碼給出了預期的結果。
代碼:
import csv
with open('some.csv', newline='') as f:
reader = csv.reader(f)
dict_ = {}
for row in reader:
if(row[0].isnumeric()):
dict_[row[0]] = [{"name":row[1]},{"Title":row[2]}]
print(dict_)
輸出:
{'1': [{'name': ' Steve'}, {'Title': ' Customer Service Manager'}], '2': [{'name': ' Martin'}, {'Title': ' Warehouse Operator'}], '3': [{'name': ' Jonathan'}, {'Title': ' Backend Developer'}]}
閱讀器回傳一個二維串列,如下所示:
[
['id', ' name', ' title'],
['1', ' Steve', ' Customer Service Manager'],
['2', ' Martin', ' Warehouse Operator'],
['3', ' Jonathan', ' Backend Developer']
]
該代碼使用 for 回圈對該串列進行操作,以將資料附加到所需格式的字典中。
uj5u.com熱心網友回復:
這里的代碼
import csv
with open('staff.csv', 'r') as f:
reader = csv.reader(f)
data = {}
next(reader) # Skip header
for row in reader[]:
#print(f"Row : {row}")
id,name,title = row
data [id] = [{'name': name} , {'title': title}]
輸出示例
{'1': [{'name': ' Steve'}, {'title': ' Customer Service Manager'}], '2': [{'name': ' Martin'}, {'title': ' Warehouse Operator'}], '3': [{'name': ' Jonathan'}, {'title': ' Backend Developer'}]}
如果要洗掉名稱和標題中的空格,可以使用功能條。
uj5u.com熱心網友回復:
pop并且DictReader可以提供一條線的解決方案:
with open('data.csv') as fd:
rd = csv.DictReader(fd)
data = {k.pop('id'): k for k in rd}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/416638.html
標籤:
上一篇:查找長度在特定范圍內的標記
