2016-10-04 77 views
1

我的文檔的每一行包含信息的字典:創建字典,加入蟒蛇

{'O':34, 'D': 75, '2015-01':{'c':30,'f':90},'2016-01':{'c':100,'f':78,'r':90.5}} 

預期的是:

for row in cursor: 
     d = dict((''.join([l,',',row[l].keys()]),row[l].values()) 
        for l in row.keys - ['O','D']) 

{'2015-01,c':30,'2015-01,f':90,'2016-01,c':100....} 

我在python嘗試這個

但我得到這個錯誤: TypeError:序列項目2:預期的str實例,發現dict_keys 請任何幫助。 謝謝

+1

你只是想在這裏你有一個有效的處理數據四位數年份?因爲您的預期輸出忽略了字典中的前兩項。 – idjaw

+0

我只想加入日期 – MAYA

+1

@idjaw由於代碼包含'row.keys - ['O','D']',我想這是所需的行爲。 – Efferalgan

回答

4

假設你的嵌套始終是一個層次深,你可以做到以下幾點:

d = {'O':34, 'D': 75, '2015':{'c':30,'f':90},'2016':{'c':100,'f':78,'r':90.5}} 

def join_dict(d): 
    for k, v in d.items(): 
     if isinstance(v, dict): 
      for k2, v2 in v.items(): 
       yield '{},{}'.format(k, k2), v2 


result = {k: v for k, v in join_dict(d)} 
print(result) 
# {'2016,f': 78, '2016,r': 90.5, '2016,c': 100, '2015,f': 90, '2015,c': 30} 
+0

您忽略了其他按鍵的位置? – MAYA

+2

您的*日期字符串*具有嵌套字典。使用'isinstance(...,dict)'來處理。 –

+0

*可以*破壞這個唯一的事情是,如果真實數據確實存在無效鍵有字典值的情況。但唯一能證實這一點的人是OP。 – idjaw

0

我的建議是:

row = {'O':34, 'D': 75, '2015':{'c':30,'f':90},'2016':{'c':100,'f':78,'r':90.5}} 
dic = {} 

for key in row : 
    if key != 'O' and key != 'D': 
     subdic = row[key] 
     for subkey in subdic : 
      dic[key+","+subkey] = subdic[subkey] 

print dic 
+0

還有其他鍵,它不是所有行都是相同的,這是我試圖 'row.keys - ['O','D']' – MAYA

+0

呃,我忽略了你顯示的鍵,但它可以輕鬆完成一個被忽略的鍵列表。 – Daneel

+0

這不是一個固定的數字。有時候,我的行中沒有一些按鍵 – MAYA