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

在字符串列中匹配字典键并填充对应值的Python技术问询

问题描述

我有一个键值对字典,还有一个包含字符串列的Pandas DataFrame,该列的字符串里包含字典的各类键。我想在DataFrame的相邻列中填充对应键的取值。

示例代码:

my_dict = {'elon' : 'is awesome', 'jeff' : 'is not so awesome, but hes ok, ig', 'mustard' : 'is gross', 'pigs' : 'can fly'}

import pandas as pd
import numpy as np
df = pd.DataFrame({
    'Name (Key)' : ['elon musk', 'jeff bezos and elon musk', 'jeff bezos', 'she bought mustard for elon'], 
    'Corresponding Value(s)' : [np.nan, np.nan, np.nan, np.nan]
})

期望输出:

pd.DataFrame({
    'Name (Key)' : ['elon musk', 'jeff bezos and elon musk', 'jeff bezos', 'she bought mustard for elon'], 
    'Corresponding Value(s)' : [
        ['is awesome'], 
        ['is not so awesome, but hes ok, ig', 'is awesome'], 
        ['is not so awesome, but hes ok, ig'], 
        ['is gross', 'is awesome']
    ]
})

我是Python新手,猜测可能会用到apply函数或者map(),用if语句可行吗?有没有更优的实现方式?


解决方案

方法1:apply遍历每行(新手友好)

逻辑直观,适合新手理解:定义函数处理每行数据,遍历字典的键,判断键是否在当前行字符串中,收集对应值。

def get_matching_values(row):
    text = row['Name (Key)']
    matching_vals = []
    for key, value in my_dict.items():
        if key in text:
            matching_vals.append(value)
    return matching_vals

# 对每行应用函数,填充目标列
df['Corresponding Value(s)'] = df.apply(get_matching_values, axis=1)

方法2:列表推导式(更简洁高效)

用列表推导替代apply,减少冗余代码,性能更优(尤其数据量大时):

df['Corresponding Value(s)'] = [
    [my_dict[key] for key in my_dict if key in text]
    for text in df['Name (Key)']
]

关于你提到的工具说明

  • if语句完全可行:上面两种方法都用if判断筛选匹配的键,这是核心逻辑。
  • map()不适合这个场景:map是一对一映射工具,只能给每个输入返回单个值,但你的需求是一个字符串可能对应多个值,无法直接满足。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:45:35