本文目录导读:

批量替换键(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}
选择哪种方法取决于你的具体需求:
- 简单替换:使用字典推导式
- 需要原地修改:使用方法二
- 复杂条件:使用函数式方法
- 需要复用:封装成类
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播