2 回答

TA貢獻1868條經驗 獲得超4個贊
問題出在這兩行:
mp[name].append({pr: []})
mp[name][pr].append({'date': pr_date}, {list(list(b.values())[0].keys())[0]: list(list(b.values())[0].values())[0]})
首先,您將 mp[name] 設置為具有兩個嵌套結構,一個包含字典的列表(pr 是字典的索引,內部結構),但您嘗試使用 pr 來索引列表而不是字典。
假設您的 NEW_STRUCTURE 是 ... {'date': date} ...(冒號而不是逗號,因此 base_name1 指向字典列表)。嘗試:
mp, op = {}, {}
for name, base in summary.items():
? ? mp[name] = []
? ? for b in base:
? ? ? ? pr = list(b.keys())[0]
? ? ? ? pr_date = pr[len(pr) - 10:]
? ? ? ? if pr_date >= start_date:? ? ? ? ? ??
? ? ? ? ? ? mp[name].append({name:[{'date': pr_date}, b[pr]]})
? ? ? ? else:
? ? ? ? ? ? print('1')? ? ? ??
還有一點關于索引:
列表由始終從 0 開始的連續整數級數索引。(如果您以不同的方式對列表進行排序,0 將始終指向第一個項目,1 將指向第二個...,-1 將指向最后一個)
字典可以由任何不可變的數字或字符串索引,但不以任何特定的鍵順序存儲。(如果對字典進行排序,則需要將其存儲為列表以保持順序,因為排序不會影響底層數據結構)

TA貢獻1802條經驗 獲得超10個贊
該對象{'cadillac': [{'cadillac from 17-07-2020': {68: 0}}, {'cadillac from 20-07-2020': {44: 0}}, {'cadillac from 20-07-2020': {1: 0}}, {'cadillac from от 17.07': {19: 0}}, {'cadillac from 16.07': {6: 0}}]}是一個字典,其中一個字符串作為鍵,一個字典的字典列表作為一個值。
讓我們打開包裝:
>>> sample = {'cadillac': [{'cadillac from 17-07-2020': {68: 0}}, {'cadillac from 20-07-2020': {44: 0}}, {'cadillac from 20-07-2020': {1: 0}}, {'cadillac from от 17.07': {19: 0}}, {'cadillac from 16.07': {6: 0}}]}
>>> sample.keys()
dict_keys(['cadillac'])
頂層只有一個鍵,'cadillac'。
>>> sample['cadillac']
[{'cadillac from 17-07-2020': {68: 0}}, {'cadillac from 20-07-2020': {44: 0}}, {'cadillac from 20-07-2020': {1: 0}}, {'cadillac from от 17.07': {19: 0}}, {'cadillac from 16.07': {6: 0}}]
該值是字典列表。您需要使用整數索引索引到列表中。我認為這就是您原來的錯誤發生的原因——您沒有考慮到額外的結構層。
>>> sample['cadillac'][0]
{'cadillac from 17-07-2020': {68: 0}}
現在你需要使用這個字典中的鍵來獲取內部字典中的值。
>>> sample['cadillac'][0]['cadillac from 17-07-2020']
{68: 0}
最后,您可以使用整數鍵來獲取最里面的值。
>>> sample['cadillac'][0]['cadillac from 17-07-2020'][68]
0
如果您喜歡考慮數據類型,請考慮如果我嘗試用 C++ 編寫此代碼,我將不得不聲明一個看起來很像的對象Dict<string, List<Dict<string, Dict<int, int>>>>(假設我已經為我們的目的創建了 Dict 和 List 類)。您可以通過這種方式更好地查看數據的嵌套結構:
Dict<string,
List<
Dict<string,
Dict<int, int>
>
>
>
添加回答
舉報