【发布时间】:2021-10-22 23:27:48
【问题描述】:
我需要一个内联函数,用这两个字典
mi_data = {'aggrLevel': 'region', 'capType': 'VTTLTEAM', 'date': '2021-03-29', 'Business': 'VTTL'}
map_to_A = {'VANTTL': 'VTTL', 'VTLONLY': 'VTL_NORMAL', 'VTTLTEAM': 'VTL_EXPO', 'VTTLCNSOLO': 'VTTL_CN', 'BTCHEM': 'BTCHEM'}
获取下一个结果
mi_data = {'aggrLevel': 'region', 'capType': 'VTL_EXPO', 'date': '2021-03-29', 'Business': 'VTTL'}
我用常规函数成功地做到了
def replace_values( d, d2 ):
for k, v in d.items():
if isinstance(v, str) and v in d2:
d[k] = d2[v]
return d
replace_values(mi_data, map_to_A)
mi_data
我尝试了这个内联函数,但没有成功
mi_data = {map_to_A.get(k, k):v for k, v in mi_data.items()}
mi_data
我无法在capType 中得到替换,我得到了相同的
mi_data = {'aggrLevel': 'region', 'capType': 'VTCTEAM', 'date': '2021-03-29', 'Business': 'VTTL'}
请注意,如果您在同一个文件中运行这两种方法,并且如果您先运行常规函数,它会更改 mi_data,也许您会认为内联函数正在完成这项工作。
【问题讨论】:
-
map_to_A字典完全不同... -
我用常规函数成功实现了您发布的函数没有任何作用,
if条件始终为False。检查值是否为str有什么意义? -
map_to_A.get(k, k)应该是map_to_A.get(v, k) -
map_to_A中没有 VTCTEAM 密钥,因此您在mi_data中得到相同的 k,v
标签: python dictionary replace dictionary-comprehension