亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我不知道如何處理這種結構

我不知道如何處理這種結構

慕慕森 2023-03-30 10:19:03
我必須像這樣構造數據:[新結構]:{name:[{base_name1:[{'date', date}, {c:s}], base_name2:[{'date', date}, {c:s}]}]}我需要從如下結構中解析它:[舊結構]{name: [{base: {calls: success}}]} base_name其中 base 是一個包含和的字符串date。我有一個示例代碼,但它不起作用。mp, op = {}, {}print(b)for name, base in summary.items():        for b in base:            pr = list(b.keys())[0]            pr_date = pr[len(pr) - 10:]            pr = pr[:-10]            if pr_date >= start_date:                mp.update({name: []})                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]})            else:                print('1')但它顯示: TypeError: list indices must be integers or slices, not str我不知道問題出在哪里。
查看完整描述

2 回答

?
MYYA

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 將指向最后一個)

  • 字典可以由任何不可變的數字或字符串索引,但不以任何特定的鍵順序存儲。(如果對字典進行排序,則需要將其存儲為列表以保持順序,因為排序不會影響底層數據結構)


查看完整回答
反對 回復 2023-03-30
?
守候你守候我

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>

        >

    >

>


查看完整回答
反對 回復 2023-03-30
  • 2 回答
  • 0 關注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號