Python字典键值案例如何批量替换

wen python案例 30

本文目录导读:

Python字典键值案例如何批量替换

  1. 批量替换键(Key)
  2. 批量替换值(Value)
  3. 同时替换键和值
  4. 复杂条件替换
  5. 实用封装函数

批量替换键(Key)

创建新字典

# 原始字典
old_dict = {'name': '张三', 'age': 25, 'city': '北京'}
# 键映射关系
key_mapping = {
    'name': 'username',
    'age': 'age',
    'city': 'address'
}
# 批量替换键
new_dict = {key_mapping.get(k, k): v for k, v in old_dict.items()}
print(new_dict)  # {'username': '张三', 'age': 25, 'address': '北京'}

原地修改(in-place)

def replace_keys(dict_obj, key_mapping):
    """原地修改字典的键"""
    for old_key, new_key in key_mapping.items():
        if old_key in dict_obj:
            dict_obj[new_key] = dict_obj.pop(old_key)
    return dict_obj
# 使用示例
my_dict = {'a': 1, 'b': 2, 'c': 3}
key_map = {'a': 'x', 'b': 'y'}
replace_keys(my_dict, key_map)
print(my_dict)  # {'x': 1, 'y': 2, 'c': 3}

批量替换值(Value)

使用列表生成式

# 原始字典
data = {'a': '苹果', 'b': '香蕉', 'c': '橘子', 'd': '苹果'}
# 值替换规则
value_mapping = {
    '苹果': 'apple',
    '香蕉': 'banana',
    '橘子': 'orange'
}
# 批量替换值
new_data = {k: value_mapping.get(v, v) for k, v in data.items()}
print(new_data)  # {'a': 'apple', 'b': 'banana', 'c': 'orange', 'd': 'apple'}

使用 map 函数

def replace_values(item):
    k, v = item
    replacements = {
        '苹果': 'apple',
        '香蕉': 'banana', 
        '橘子': 'orange'
    }
    return (k, replacements.get(v, v))
data = {'a': '苹果', 'b': '香蕉', 'c': '橘子'}
result = dict(map(replace_values, data.items()))
print(result)  # {'a': 'apple', 'b': 'banana', 'c': 'orange'}

同时替换键和值

def batch_replace(dict_obj, key_map=None, value_map=None):
    """同时批量替换键和值"""
    result = {}
    for k, v in dict_obj.items():
        # 替换键
        new_key = key_map.get(k, k) if key_map else k
        # 替换值
        new_value = value_map.get(v, v) if value_map else v
        result[new_key] = new_value
    return result
# 使用示例
original = {'name': '张三', 'age': '25岁', 'city': '北京'}
key_map = {'name': 'username', 'city': 'location'}
value_map = {'张三': 'Zhang San', '25岁': '25', '北京': 'Beijing'}
result = batch_replace(original, key_map, value_map)
print(result)  # {'username': 'Zhang San', 'age': '25', 'location': 'Beijing'}

复杂条件替换

def conditional_replace(data, conditions):
    """
    根据条件批量替换
    conditions: list of (key_pattern, value_transform_func) 
    """
    result = {}
    for k, v in data.items():
        new_key = k
        new_value = v
        for key_pattern, transform_func in conditions:
            if key_pattern in k or key_pattern(k):  # 支持字符串包含或函数判断
                new_key = transform_func(k) if callable(transform_func) else transform_func
                new_value = transform_func(v) if callable(transform_func) else v
                break
        result[new_key] = new_value
    return result
# 示例:将所有包含"old"的键替换,并将数字值翻倍
data = {'old_name': '张三', 'old_age': 25, 'new_item': '测试'}
conditions = [
    (lambda x: 'old_' in x, lambda x: x.replace('old_', 'new_') if isinstance(x, str) else x),
]
result = conditional_replace(data, conditions)
print(result)  # {'new_name': '张三', 'new_age': 25, 'new_item': '测试'}

实用封装函数

class DictReplacer:
    """字典批量替换工具类"""
    def __init__(self, key_rules=None, value_rules=None):
        self.key_rules = key_rules or {}
        self.value_rules = value_rules or {}
    def add_key_rule(self, old_key, new_key):
        self.key_rules[old_key] = new_key
    def add_value_rule(self, old_value, new_value):
        self.value_rules[old_value] = new_value
    def replace(self, dict_obj, inplace=False):
        """执行替换"""
        if inplace:
            # 原地修改
            for old_key, new_key in self.key_rules.items():
                if old_key in dict_obj:
                    dict_obj[new_key] = dict_obj.pop(old_key)
            for old_value, new_value in self.value_rules.items():
                for k, v in list(dict_obj.items()):
                    if v == old_value:
                        dict_obj[k] = new_value
            return dict_obj
        else:
            # 返回新字典
            return {
                self.key_rules.get(k, k): 
                self.value_rules.get(v, v)
                for k, v in dict_obj.items()
            }
# 使用示例
replacer = DictReplacer()
replacer.add_key_rule('name', 'username')
replacer.add_value_rule('苹果', 'apple')
data = {'name': '苹果', 'age': 25}
result = replacer.replace(data)
print(result)  # {'username': 'apple', 'age': 25}

选择哪种方法取决于你的具体需求:

  • 简单替换:使用字典推导式
  • 需要原地修改:使用方法二
  • 复杂条件:使用函数式方法
  • 需要复用:封装成类

抱歉,评论功能暂时关闭!