如何合并字典中同前缀对应值并转换为Pandas DataFrame?
更简洁高效的实现方案
一、字典重构优化
你的现有实现逻辑清晰,这里提供两种更简洁的写法,同时保证-和+符号始终存在:
写法1:可读性优先
a = {1: [['-','A'],['+','B'],['-','C']]} for key, lst in a.items(): # 预先初始化正负分组,避免符号缺失 groups = {'-': [], '+': []} for sign, char in lst: groups[sign].append(char) # 拼接字符并更新字典 a[key] = [[sign, ''.join(chars)] for sign, chars in groups.items()]
写法2:简洁性优先
from collections import defaultdict a = {1: [['-','A'],['+','B'],['-','C']]} a = { key: [ [sign, ''.join(chars)] for sign, chars in defaultdict(list, ((v[0], v[1]) for v in val)).items() ] for key, val in a.items() } # 若需强制保证正负都存在,可在推导前初始化包含'-'和'+'的分组字典
二、直接生成目标DataFrame(高效首选)
如果最终目标是生成DataFrame,无需先重构字典,直接用pandas的分组功能处理原始数据,效率更高且代码更简洁:
import pandas as pd a = {1: [['-','A'],['+','B'],['-','C']]} # 1. 展开原始字典为扁平列表 raw_data = [] for col1, items in a.items(): for col2, col3 in items: raw_data.append([col1, col2, col3]) # 2. 转临时DataFrame并分组拼接字符 df = pd.DataFrame(raw_data, columns=['Col1', 'Col2', 'Col3']) df = df.groupby(['Col1', 'Col2'])['Col3'].agg(''.join).reset_index() # 3. 确保正负符号都存在(即使对应字符为空) full_groups = pd.MultiIndex.from_product( [df['Col1'].unique(), ['-', '+']], names=['Col1', 'Col2'] ) df = df.set_index(['Col1', 'Col2']).reindex(full_groups, fill_value='').reset_index()
运行后得到的DataFrame结构如下:
| Col1 | Col2 | Col3 |
|---|---|---|
| 1 | - | AC |
| 1 | + | B |
这种方法跳过了字典的中间转换,利用pandas的向量化操作,在数据量较大时性能优势更明显。
内容的提问来源于stack exchange,提问作者b1717
相关产品推荐
相关产品推荐

