2016-10-04 85 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