對于大多數人來說,這可能是一個超級簡單的問題,但一個有困難的學生希望得到一些幫助。 我有一個字典,里面有一個嵌套字典的串列。 其中一些專案缺失或順序錯誤。
我試圖以特定的順序(串列)將其匯出為csv。 我需要比較串列中的專案是否有鍵名并回傳值。
示例
my_list=["_id"/span>, "count"/span>, "f_name"/span>, "l_name"/span>, "number"/span>, "country]
my_dict = [{
"_id"。123,
"count": 345,
"account": [
{
"f_name": "Adam"。
"l_name": "Adamson"。
"number": 1,
"country": "Argentina"
},
{,
"l_name": "Charlson"。
"country": "加拿大"
},
{
"f_name": "David"。
"country": "Denmark"。
"number": 3,
"l_name": "Davidson"
},
]
},
{
"_id" 。678,
"count": 981,
"account": [
{
"f_name": "Edvin"。
"number": 4,
"country": "Equador"
},
]
}]
預期輸出
_id| count | f_name | l_name | number | country
------------------------------------------------------
123 | 345 | Adam | Adamson | 1 | Argentina
------------------------------------------------------
123 | 345 | N/A | Charlosn | N/A | 加拿大
------------------------------------------------------
123 | 345 | David | Davidson | 3 | 丹麥
------------------------------------------------------
678 | 981 | Edwin | 不適用 | 4 | Equador
------------------------------------------------------
如果有任何幫助或建議,我們將不勝感激。
uj5u.com熱心網友回復:
你可以實作一個像這樣的回圈。
fmtstr = "{:<4} | {:<6} | {:<8} {:<8} | {:<8}|{:<8} | {:^6} | {:<8}"
line = "--------------------------------------------------------"
print(fmtstr.format(*my_list)
print(line)
for entry in my_dict:
id_ = entry.get('_id')
count = entry.get('count')
for nentry in entry.get('account', [] )。)
print(fmtstr.format(id_,
count,
nentry.get('f_name', 'N/A') 。
nentry.get('l_name', 'N/A') 。
nentry.get('number', 'N/A') 。
nentry.get('country', 'N/A'))
print(line)
使用你的資料,輸出是:
_id| count | f_name | l_name | number | country
--------------------------------------------------------
123 | 345 | Adam | Adamson | 1 | Argentina
--------------------------------------------------------
123 | 345 | 不適用 | Charlson | 不適用 | 加拿大
--------------------------------------------------------
123 | 345 | David | Davidson | 3 | 丹麥
--------------------------------------------------------
678 | 981 | Edvin | 不適用 | 4 | Equador
--------------------------------------------------------
如果你需要CSV格式的資料,解決方案更簡單:
如果你需要CSV格式的資料,解決方案更簡單。
print(', '.join(my_list))
for entry in my_dict:
id_ = entry.get('_id')
count = entry.get('count')
for nentry in entry.get('account', [] )。)
print(("{},{},{},{}")
.format(id_,
count,
nentry.get('f_name', 'N/A') 。
nentry.get('l_name', 'N/A') 。
nentry.get('number', 'N/A') 。
nentry.get('country', 'N/A'))))
這一次的輸出將是:
_id,count, f_name, l_name, number, country
123,345, Adam,Adamson,1, Argentina
123,345,不詳,Charlson,不詳,加拿大
123,345,David,Davidson,3,丹麥
678,981,Edvin,N/A,4, Equador
uj5u.com熱心網友回復:
一旦你修復了串列和字典中的錯別字,你可以將字典轉換為一個表格(串列的串列),并使用csv模塊將其匯出:
table = [ [d.get(k,a.get(k,'N/A') for k in my_list]
for d in my_dict for a in d['account'] ] 。
輸出:
for row in table:print(row
[123, 345, 'Adam', 'Adamson', 1, 'Argentina']
[123, 345, 'N/A', 'Charlson', 'N/A', '加拿大']
[123, 345, 'David', 'Davidson', 3, 'Danish']
[678, 981, 'Edvin', 'N/A'/span>, 4, 'Equador']
然后保存到csv檔案:
import csv
with open('table.csv','w')。as f。
output = csv.writer(f)
output.writerow(my_list)
for row in table:
output.writerow(row)
對漂亮的列印表格:
for row in [my_list,*table] 。
print("|". join(f" {str(c): 10}" for c in row)
print("-"/span>*70)
_id | count | f_name | l_name | number | country
----------------------------------------------------------------------
123 | 345 | Adam | Adamson | 1 | Argentina
----------------------------------------------------------------------
123 | 345 | 不適用 | Charlson | 不適用 | 加拿大
----------------------------------------------------------------------
123 | 345 | David | Davidson | 3 | 丹麥
----------------------------------------------------------------------
678 | 981 | Edvin | 不適用 | 4 | Equador
----------------------------------------------------------------------
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/325741.html
標籤:
