📜  Python – 扁平化嵌套键

📅  最后修改于: 2022-05-13 01:55:34.641000             🧑  作者: Mango

Python – 扁平化嵌套键

有时,在处理Python数据时,我们可能会遇到需要对嵌套列表记录中的某些键执行扁平化的问题。数据预处理时会出现这种问题。让我们讨论可以执行此任务的某些方式。

方法#1:使用循环
这是执行此任务的蛮力方法。在此,我们通过分配基本键来构造新字典,然后使用嵌套循环执行内部键元素的展平。

# Python3 code to demonstrate working of 
# Flatten Nested Keys
# Using loop
  
# initializing list
test_list = [{'Gfg' :  1, 'id' : 1, 'data' : [{'rating' : 7, 'price' : 4},
             {'rating' : 17, 'price' : 8}]}, 
             {'Gfg' :  1, 'id' : 2, 'data' : [{'rating' : 18, 'price' : 19}]}]
  
# printing original list
print("The original list is : " + str(test_list))
  
# Flatten Nested Keys
# Using loop
res = []
for sub in test_list:
    temp1 = {
      'Gfg': sub['Gfg'],
      'id': sub['id']
    }
    for data in sub.get('data', []):
        res.append({
            **temp1,
            'rating': data['rating'],
            'price': data['price']})
  
# printing result 
print("The flattened list : " + str(res)) 
输出 :

方法 #2:使用列表理解 + zip() + itemgetter()
上述功能的组合可用于执行此任务。在此,我们使用 itemgetter() 提取所需的对并使用 zip() 组合对。数据的编译使用列表理解。

# Python3 code to demonstrate working of 
# Flatten Nested Keys
# Using list comprehension + zip() + itemgetter()
from operator import itemgetter
  
# initializing list
test_list = [{'Gfg' :  1, 'id' : 1, 'data' : [{'rating' : 7, 'price' : 4},
             {'rating' : 17, 'price' : 8}]}, 
             {'Gfg' :  1, 'id' : 2, 'data' : [{'rating' : 18, 'price' : 19}]}]
  
# printing original list
print("The original list is : " + str(test_list))
  
# initializing base and flatten keys 
base_keys = 'Gfg', 'id'
flatten_keys = 'rating', 'price'
  
# Flatten Nested Keys
# Using list comprehension + zip() + itemgetter()
res = [dict(zip(base_keys + flatten_keys, itemgetter(*base_keys)(sub) + itemgetter(*flatten_keys)(data))) for sub in test_list for data in sub['data']]
  
# printing result 
print("The flattened list : " + str(res)) 
输出 :