我有一個元組串列,如下所示:
tuplelist = [
(datetime.date(2020, 4, 20), 4.23, 'EUR'),
(datetime.date(2020, 4, 20), 3.76, 'USD'),
(datetime.date(2020, 4, 20), 4.21, 'EUR'),
(datetime.date(2020, 4, 20), 5.20, 'GPB'),
(datetime.date(2020, 4, 20), 3.77, 'USD'),
(datetime.date(2020, 4, 20), 4.27, 'EUR'),
(datetime.date(2020, 4, 20), 3.79, 'USD'),
(datetime.date(2020, 4, 20), 4.30, 'EUR'),
(datetime.date(2020, 4, 20), 5.14, 'GPB'),
(datetime.date(2020, 4, 20), 3.77, 'USD'),
(datetime.date(2020, 4, 25), 4.23, 'EUR'),
(datetime.date(2020, 4, 25), 3.76, 'USD'),
(datetime.date(2020, 4, 25), 4.21, 'EUR'),
(datetime.date(2020, 4, 25), 5.20, 'GPB'),
(datetime.date(2020, 4, 25), 3.77, 'USD'),
(datetime.date(2020, 4, 27), 4.27, 'EUR'),
(datetime.date(2020, 4, 27), 3.79, 'USD'),
(datetime.date(2020, 4, 27), 4.30, 'EUR'),
(datetime.date(2020, 4, 27), 5.14, 'GPB'),
(datetime.date(2020, 4, 28), 3.77, 'USD'),
(datetime.date(2020, 4, 28), 4.23, 'EUR'),
(datetime.date(2020, 5, 2), 3.76, 'USD'),
(datetime.date(2020, 5, 2), 4.21, 'EUR'),
(datetime.date(2020, 5, 2), 5.20, 'GPB'),
(datetime.date(2020, 5, 2), 3.77, 'USD'),
(datetime.date(2020, 5, 2), 4.27, 'EUR'),
(datetime.date(2020, 5, 5), 3.79, 'USD'),
(datetime.date(2020, 5, 5), 4.30, 'EUR'),
(datetime.date(2020, 5, 5), 5.14, 'GPB'),
(datetime.date(2020, 5, 5), 3.77, 'USD')
]
我想按日期和貨幣符號對其進行分組。它應該看起來像這樣(每天):
(datetime.date(2020, 4, 20), [{'EUR': [4.23, 4.21, 4.27, 4.3]}, {'USD': [3.76, 3.77, 3.79, 3.77]}, {'GPB': [5.2, 5.14]}])
我設法使用這行代碼按資料分組:
tuplelist2dict = {key: [*map(lambda v: {v[2]:v[1]}, values)] for key, values in groupby(tuplelist, lambda x: x[0])}
我得到這個輸出:
(datetime.date(2020, 4, 20), [{'EUR': 4.23}, {'USD': 3.76}, {'EUR': 4.21}, {'GPB': 5.2}, {'USD': 3.77}, {'EUR': 4.27}, {'USD': 3.79}, {'EUR': 4.3}, {'GPB': 5.14}, {'USD': 3.77}])
(datetime.date(2020, 4, 25), [{'EUR': 4.23}, {'USD': 3.76}, {'EUR': 4.21}, {'GPB': 5.2}, {'USD': 3.77}])
(datetime.date(2020, 4, 27), [{'EUR': 4.27}, {'USD': 3.79}, {'EUR': 4.3}, {'GPB': 5.14}])
(datetime.date(2020, 4, 28), [{'USD': 3.77}, {'EUR': 4.23}])
(datetime.date(2020, 5, 2), [{'USD': 3.76}, {'EUR': 4.21}, {'GPB': 5.2}, {'USD': 3.77}, {'EUR': 4.27}])
(datetime.date(2020, 5, 5), [{'USD': 3.79}, {'EUR': 4.3}, {'GPB': 5.14}, {'USD': 3.77}])
但是,我正在努力合并不同貨幣的值以獲取我顯示的這些資料的格式。
我會很感激任何提示。
uj5u.com熱心網友回復:
我不會嘗試在理解中執行所有這些復雜的操作。相反,為了簡潔起見,我將使用兩個for回圈來更新嵌套資料結構:.setdefault()
result = {}
for date, currency_entries in groupby(tuplelist, lambda x: x[0]):
for _, currency_val, currency_name in currency_entries:
result.setdefault(date, {}).setdefault(currency_name, []).append(currency_val)
這輸出:
{datetime.date(2020, 4, 20): {'EUR': [4.23, 4.21, 4.27, 4.3], 'USD': [3.76, 3.77, 3.79, 3.77], 'GPB': [5.2, 5.14]}, datetime.date(2020, 4, 25): {'EUR': [4.23, 4.21], 'USD': [3.76, 3.77], 'GPB': [5.2]}, datetime.date(2020, 4, 27): {'EUR': [4.27, 4.3], 'USD': [3.79], 'GPB': [5.14]}, datetime.date(2020, 4, 28): {'USD': [3.77], 'EUR': [4.23]}, datetime.date(2020, 5, 2): {'USD': [3.76, 3.77], 'EUR': [4.21, 4.27], 'GPB': [5.2]}, datetime.date(2020, 5, 5): {'USD': [3.79, 3.77], 'EUR': [4.3], 'GPB': [5.14]}}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/479610.html
