You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多维列表及嵌套JSON数据转换为一维列表?

多维结构转一维的实用解决方法

Hey,针对你问的两个关于把多维结构转成一维的问题,我整理了几个实用的方案,你可以根据自己的场景选择:


1. 如何将多维列表转换为一维列表?

多维列表扁平化是很常见的需求,我平时常用这几种方法:

方法一:递归实现(通用款,支持任意深度)

如果你的嵌套列表深度不确定,递归是最稳妥的方式,逻辑也容易理解:

def flatten_list(nested_list):
    result = []
    for item in nested_list:
        # 如果当前元素是列表,就递归展开后加入结果
        if isinstance(item, list):
            result.extend(flatten_list(item))
        else:
            result.append(item)
    return result

# 示例调用
nested = [1, [2, [3, 4], 5], 6, [7, [8, [9]]]]
print(flatten_list(nested))  # 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]

方法二:列表推导式(适合浅嵌套,简洁高效)

如果你的列表最多只有一两层嵌套,用列表推导式写起来更短:

nested = [1, [2, 3], [4, 5], 6]
flattened = [item for sublist in nested for item in sublist]
print(flattened)  # 输出: [1, 2, 3, 4, 5, 6]

# 如果有部分元素不是列表,可以加个判断兼容
nested_mixed = [1, [2, 3], 4, [5, [6]]]
flattened_mixed = [item for sublist in nested_mixed for item in (sublist if isinstance(sublist, list) else [sublist])]
print(flattened_mixed)  # 输出: [1, 2, 3, 4, 5, [6]] 注意:这个只能处理一层嵌套

方法三:用itertools.chain(工具类方案)

Python标准库的itertools里的chain方法专门用来拼接可迭代对象,配合from_iterable可以快速处理浅嵌套:

from itertools import chain

nested = [1, [2, 3], [4, 5]]
flattened = list(chain.from_iterable(nested))
print(flattened)  # 输出: [1, 2, 3, 4, 5]

# 深层嵌套的话,可以结合递归或者reduce
from functools import reduce
def flatten_deep(nested):
    return reduce(lambda x, y: x + flatten_deep(y) if isinstance(y, list) else x + [y], nested, [])

print(flatten_deep([1, [2, [3, 4]]]))  # 输出: [1, 2, 3, 4]

2. 嵌套JSON转换为扁平化字典的列表

你的需求是把嵌套的JSON数组里的每个对象,转成键用连字符连接的扁平化字典(比如food-spicy这种格式),我写了个递归函数来处理,完全匹配你的需求:

实现代码

def flatten_dict(nested_dict, parent_key='', sep='-'):
    items = []
    for key, value in nested_dict.items():
        # 拼接父键和当前键,用连字符分隔
        new_key = f"{parent_key}{sep}{key}" if parent_key else key
        # 如果值还是字典,继续递归扁平化
        if isinstance(value, dict):
            items.extend(flatten_dict(value, new_key, sep).items())
        else:
            # 去掉键和值的首尾空格,和你示例格式一致
            items.append((new_key.strip(), value.strip()))
    return dict(items)

# 你的原始JSON数据
original_json = [
    {"food": {"spicy": "spicy","sweet": "sweet"}, "water": {"sweet": "sweet","sour": {"cold": "ice lemon","hot": "lemon tea"}} },
    {"food": {"spicy": "spicy","sweet": "sweet"}, "water": {"sweet": "sweet","sour": {"cold": "ice lemon","hot": "lemon tea"}} }
]

# 批量转换每个对象
flattened_result = [flatten_dict(item) for item in original_json]

# 打印结果看看
import pprint
pprint.pprint(flattened_result)

输出结果

[{'food-spicy': 'spicy',
  'food-sweet': 'sweet',
  'water-sweet': 'sweet',
  'water-sour-cold': 'ice lemon',
  'water-sour-hot': 'lemon tea'},
 {'food-spicy': 'spicy',
  'food-sweet': 'sweet',
  'water-sweet': 'sweet',
  'water-sour-cold': 'ice lemon',
  'water-sour-hot': 'lemon tea'}]

内容的提问来源于stack exchange,提问作者Daniel Mana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:17:54