我正在嘗試生成一個 python 字典,結果如下:
{'student_1': [{2017: 3}, {2018: 4}], 'student_2': [{2017: 60}, {2021: 153}], 'student_3': [{2015: 45}]}
資料來自一個表格的資料庫表,如下所示:
| yearfiled | count | name |
| 2017 | 3 | student_1 |
| 2018 | 4 | student_1 |
| 2017 | 60 | student_2 |
| 2021 | 153 | student_2 |
| 2015 | 45 | student_3 |
我可以生成所需的格式化字典,但是,字典中的每個鍵都將值替換為資料庫表中最后一個鍵的值。
# chartdata is a fetchall() from a executed database query
q={}
for a,b,c in chartdata:
v=[]
q[a]=b
v.append(q)
datasetnew[c] = v
# Results
{'student_1': [{2015: 45}], 'student_2': [{2015:45}], 'student_3': [{2015:45}]}
我對如何解決這個問題有點困惑。有什么想法嗎?
我嘗試了幾行不同的代碼,但是沒有一個產生正確的結果。
例如,此更改將每個學生的所有值放在每個學生鍵中。
v=[]
q={}
for a,b,c in chartdata:
q[a]=b
v.append(q)
datasetnew[c] = v
uj5u.com熱心網友回復:
您可以通過以下方式更輕松地實作這一目標defaultdict:
from collections import defaultdict
datasetnew = defaultdict(list)
for year, count, name in chartdata:
datasetnew[name].append({ year: count })
結果是:
{
'student_1': [{2017: 3}, {2018: 4}],
'student_2': [{2017: 60}, {2021: 153}],
'student_3': [{2015: 45}]
}
但是,我想知道您為什么要創建每個只有一個鍵的字典串列?將這些小詞典合并到每個學生一本詞典中似乎更有用:
datasetnew = defaultdict(dict)
for year, count, name in chartdata:
datasetnew[name][year] = count
這產生了這個結構:
{
'student_1': {2017: 3, 2018: 4},
'student_2': {2017: 60, 2021: 153},
'student_3': {2015: 45}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/532888.html
標籤:python-3.x字典
