[英]python - creating dictionary from comma-separated lines, containing nested values
[英]How to create comma-separated values from nested dictionary?
我需要創建一個 CSV 文件,其中填充了來自嵌套字典的數據。
我指的是這個問題: Convert Nested Dictionary to CSV Table 。
我檢查了這個問題: 從嵌套字典到 CSV 文件,並找到了一種創建逗號分隔值的方法。
我的嵌套字典如下所示:
users_item = {
"Angelica": {
"Blues Traveler": 3.5,
"Broken Bells": 2.0,
"Norah Jones": 4.5,
"Phoenix": 5.0,
"Slightly Stoopid": 1.5,
"The Strokes": 2.5,
"Vampire Weekend": 2.0
},
"Bill":{
"Blues Traveler": 2.0,
"Broken Bells": 3.5,
"Deadmau5": 4.0,
"Phoenix": 2.0,
"Slightly Stoopid": 3.5,
"Vampire Weekend": 3.0}
}
with open('output1.csv', 'w') as csv_file:
csvwriter = csv.writer(csv_file, delimiter=',')
for session in users_item:
for item in users_item[session]:
csvwriter.writerow([session, item, users_item[session][item]])
我生成了這個 output。
Angelica,Blues Traveler,3.5
Angelica,Broken Bells,2.0
Angelica,Norah Jones,4.5
Angelica,Phoenix,5.0
Angelica,Slightly Stoopid,1.5
Angelica,The Strokes,2.5
Angelica,Vampire Weekend,2.0
Bill,Blues Traveler,2.0
Bill,Broken Bells,3.5
Bill,Deadmau5,4.0
Bill,Phoenix,2.0
Bill,Slightly Stoopid,3.5
Bill,Vampire Weekend,3.0
但是,我需要按以下格式生成 output:
Angelica,Blues Traveler,3.5,Broken Bells,2.0,Norah Jones,4.5,Phoenix,5.0,Slightly Stoopid,1.5,The Strokes,2.5,Vampire Weekend,2.0
Bill,Blues Traveler,2.0,Broken Bells,3.5,Deadmau5,4.0,Phoenix,2.0,Slightly Stoopid,3.5,Vampire Weekend,3.0
你能告訴我如何修改代碼以獲得我上面顯示的 output 嗎?
你的很接近。 我將修改您的方法,使用itertools.chain.from_iterable
將內部 dict 項展平為列表,然后將其與用戶名結合起來,並將列表寫入 CSV 文件。
修改后的代碼:
from csv import writer
from itertools import chain
users_item = {
"Angelica": {
"Blues Traveler": 3.5,
"Broken Bells": 2.0,
"Norah Jones": 4.5,
"Phoenix": 5.0,
"Slightly Stoopid": 1.5,
"The Strokes": 2.5,
"Vampire Weekend": 2.0,
},
"Bill": {
"Blues Traveler": 2.0,
"Broken Bells": 3.5,
"Deadmau5": 4.0,
"Phoenix": 2.0,
"Slightly Stoopid": 3.5,
"Vampire Weekend": 3.0,
},
}
with open("output.csv", mode="w", newline='') as f:
writer = writer(f)
for user, items in users_item.items():
flattened_items = list(chain.from_iterable(items.items()))
writer.writerow([user, *flattened_items])
或使用列表推導展平:
with open("output.csv", mode="w", newline="") as f:
writer = writer(f)
for user, items in users_item.items():
row = [item for kvp in items.items() for item in kvp]
writer.writerow([user, *row])
或者一種更簡單的方法,只需將鍵值對一次擴展為一個列表:
with open("output.csv", mode="w", newline="") as f:
writer = writer(f)
for user, items in users_item.items():
row = [user]
for k, v in items.items():
row.extend([k, v])
writer.writerow(row)
output.csv
Angelica,Blues Traveler,3.5,Broken Bells,2.0,Norah Jones,4.5,Phoenix,5.0,Slightly Stoopid,1.5,The Strokes,2.5,Vampire Weekend,2.0
Bill,Blues Traveler,2.0,Broken Bells,3.5,Deadmau5,4.0,Phoenix,2.0,Slightly Stoopid,3.5,Vampire Weekend,3.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.