首页 > 解决方案 > 嵌套列表操作

问题描述

我有一个嵌套列表,其中包含产品名称、产品 ID 和产品数据(另一个列表)。我想创建一个具有唯一名称和产品 ID 的字典列表,并加入与 name 和 id 变量相关的数据列表。

我的数据看起来像:

print(x)
[(14, 'netflix', [1, 2, 3, 4, 5, 6]), (14, 'netflix', [7, 8, 9, 10]),(15,'tv',
[1, 2, 3, 4, 5]), (15, 'tv', [7, 8, 9]), (16, 'radio', [1, 2, 3, 4]), 
(16, 'radio', [1, 2, 3, 4]) 

我想将我的数据转换为:

x = [{'product_id':x[0], 'product': row[1], 'values':row[2]} for row in x]

#or for this example

x = [{'product_id':14, 'product':'netflix', 'values':[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}, 
     {'product_id':15, 'product': 'tv',     'values':[1, 2, 3, 4, 5, 6, 7, 8, 9]}, 
     {'product_id':16, 'product': 'radio',  'values':[1, 2, 3, 4, 1, 2, 3, 4]}]

我知道我可以使用以下方法遍历嵌套列表:

for inner_l in x:
    for item in x:
        print(item)

但我不确定如何操作这些列表来创建我想要的输出

标签: pythonpython-3.xpandaslistnumpy

解决方案


使用简单的迭代。

前任:

data = [(14, 'netflix', [1, 2, 3, 4, 5, 6]), (14, 'netflix', [7, 8, 9, 10]),(15,'tv',[1, 2, 3, 4, 5]), (15, 'tv', [7, 8, 9]), (16, 'radio', [1, 2, 3, 4]),(16, 'radio', [1, 2, 3, 4]) ]
keys = ['product_id', 'product', 'values']
result = {}   
for product_id, product, values in data:
    if product_id not in result:
        result[product_id] = dict(zip(keys, (product_id, product, values)))
    else:
        result[product_id]["values"].extend(values)
print(list(result.values()))

输出:

[{'product': 'netflix',
  'product_id': 14,
  'values': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]},
 {'product': 'tv', 'product_id': 15, 'values': [1, 2, 3, 4, 5, 7, 8, 9]},
 {'product': 'radio', 'product_id': 16, 'values': [1, 2, 3, 4, 1, 2, 3, 4]}]  

推荐阅读