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))
The original list is : [{‘data’: [{‘rating’: 7, ‘price’: 4}, {‘rating’: 17, ‘price’: 8}], ‘id’: 1, ‘Gfg’: 1}, {‘data’: [{‘rating’: 18, ‘price’: 19}], ‘id’: 2, ‘Gfg’: 1}]
The flattened list : [{‘price’: 4, ‘rating’: 7, ‘id’: 1, ‘Gfg’: 1}, {‘price’: 8, ‘rating’: 17, ‘id’: 1, ‘Gfg’: 1}, {‘price’: 19, ‘rating’: 18, ‘id’: 2, ‘Gfg’: 1}]
方法 #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))
The original list is : [{‘data’: [{‘rating’: 7, ‘price’: 4}, {‘rating’: 17, ‘price’: 8}], ‘id’: 1, ‘Gfg’: 1}, {‘data’: [{‘rating’: 18, ‘price’: 19}], ‘id’: 2, ‘Gfg’: 1}]
The flattened list : [{‘price’: 4, ‘rating’: 7, ‘id’: 1, ‘Gfg’: 1}, {‘price’: 8, ‘rating’: 17, ‘id’: 1, ‘Gfg’: 1}, {‘price’: 19, ‘rating’: 18, ‘id’: 2, ‘Gfg’: 1}]