如何快速将字典列表转换为以pay为键的嵌套字典
将字典列表转换为以'pay'为键的嵌套字典
原始输入
original_list = [ {'first': '0', 'last': 'hg', 'pay': '0', 'hossain': '{}'}, {'first': '0', 'last': 'hg', 'pay': '195', 'hossain': '{}'}, {'first': '0', 'last': 'hg', 'pay': '1', 'hossain': '{}'}, {'first': '0', 'last': 'hg', 'pay': '344', 'hossain': '{}'}, {'first': '0', 'last': 'hg', 'pay': '4', 'hossain': '{}'}, {'first': '0', 'last': 'hg', 'pay': '6', 'hossain': '{}'}, {'first': '0', 'last': 'hg', 'pay': '5', 'hossain': '{}'}, {'first': '0', 'last': 'hg', 'pay': '7', 'hossain': '{}'}, {'first': '0', 'last': 'hg', 'pay': '8', 'hossain': '{}'}, {'first': '0', 'last': 'hg', 'pay': '9', 'hossain': '{}'} ]
期望输出
desired_dict = { '0': {'first': '0', 'last': 'hg', 'hossain': '{}'}, '195': {'first': '0', 'last': 'hg', 'hossain': '{}'}, '1': {'first': '0', 'last': 'hg', 'hossain': '{}'}, '344': {'first': '0', 'last': 'hg', 'hossain': '{}'}, '4': {'first': '0', 'last': 'hg', 'hossain': '{}'}, '6': {'first': '0', 'last': 'hg', 'hossain': '{}'}, '5': {'first': '0', 'last': 'hg', 'hossain': '{}'}, '7': {'first': '0', 'last': 'hg', 'hossain': '{}'}, '8': {'first': '0', 'last': 'hg', 'hossain': '{}'}, '9': {'first': '0', 'last': 'hg', 'hossain': '{}'} }
快速转换方法
方法1:字典推导式(最简洁,不修改原数据)
直接通过字典推导式遍历列表,提取pay作为外层键,同时生成移除pay键的内层字典:
result = {item['pay']: {k: v for k, v in item.items() if k != 'pay'} for item in original_list}
方法2:使用pop(高效但修改原列表)
如果不需要保留原始列表中的字典结构,可以用pop直接移除pay键并获取其值作为外层键:
result = {} for item in original_list: pay_key = item.pop('pay') result[pay_key] = item
注意:此方法会改变原始列表中的字典内容,若需保留原数据优先选方法1。
方法3:处理重复pay键的场景
如果原始列表存在相同pay值的字典,上面的方法会覆盖旧条目。若要将同pay的字典收集为列表,可这样处理:
result = {} for item in original_list: pay_key = item['pay'] cleaned_item = {k: v for k, v in item.items() if k != 'pay'} if pay_key in result: result[pay_key].append(cleaned_item) else: result[pay_key] = [cleaned_item]
内容的提问来源于stack exchange,提问作者حسین سلطانی
相关产品推荐
相关产品推荐

