2016-08-25 144 views
0
扁平化功能

由於功能需要一些改進:提高蟒蛇

def flatten(d, parent_key=''): 
    items = [] 
    for k, v in d.items(): 
     try: 
      items.extend(flatten(v, '%s%s.' % (parent_key, k)).items()) 
     except AttributeError: 
      items.append(('%s%s' % (parent_key, k), v)) 
    return dict(items) 

我想修改上面的功能。
,它也變得平坦列表:

{'d': [1, 2, 3]} 

爲了這樣的事情:

{'d[0]': 1, 'd[1]': 3, 'd[2]': 3} 

編輯: 此代碼對我來說,但它不是第一個任何想法,圓滑改進?

def flatten_dict(d): 
    def items(): 
     for key, value in d.items(): 
      if isinstance(value, dict): 
       for subkey, subvalue in flatten_dict(value).items(): 
        yield key + "." + subkey, subvalue 
      elif isinstance(value, list): 
       for index, val in enumerate(value): 
        yield key + "[" + str(index) + "]" , value[index] 
      else: 
       yield key, value 

    return dict(items()) 

回答

0

試試這個,

def flattern(dict_): 
    result = {} 
    for key in dict_: 
     for i,j in enumerate(dict_[key]): 
      result[key+'['+str(i)+']'] = j 
    return result 

通話功能就是這樣,

In [40]: d 
Out[40]: {'a': [1, 2, 3, 7], 'd': [1, 2, 3]} 

In [41]: flattern(d) 
Out[41]: {'a[0]': 1, 'a[1]': 2, 'a[2]': 3, 'a[3]': 7, 'd[0]': 1, 'd[1]': 2, 'd[2]': 3} 
+0

我將如何落實到功能? – Skeec

+0

問題是我不知道事先的關鍵:■ – Skeec

+0

不工作對我來說 類型錯誤:「詮釋」對象不是可迭代 – Skeec