我有两本字典需要比较一下。应该找出A-B和B-A之间的差别.结果应显示如下...
我写了代码,但看起来太复杂了。我想知道如何重构代码使其看起来简单而优雅。
巨蟒
def get_sd_db_stepids_difference(source_dict=None, db_dict=None):
NONE = None
algo_list_db = set(source_dict.keys())
algo_list_sd = set(db_dict.keys())
get_all_keys_sd_db=list(algo_list_db.union(algo_list_db,algo_list_sd))
result_enabled={}
result_disabled = {}
for algo_name in get_all_keys_sd_db:
is_key_present_db = algo_name in source_dict
is_Key_Present_sd = algo_name in db_dict
if is_key_present_db == is_Key_Present_sd:
car_diff_enabled = set(source_dict.get(algo_name, NONE)) - set(db_dict.get(algo_name, NONE))
car_diff_disabled = set(db_dict.get(algo_name, NONE)) - set(source_dict.get(algo_name, NONE))
result_enabled[algo_name] = ' ' if len(car_diff_disabled) == 0 else list(car_diff_disabled)
result_disabled[algo_name] = ' ' if len(car_diff_enabled) == 0 else list(car_diff_enabled)
elif is_Key_Present_sd==1 and is_key_present_db==0:
car_diff_enabled = list(db_dict.get(algo_name, NONE))
result_enabled[algo_name] = car_diff_enabled
elif is_Key_Present_sd == 0 and is_key_present_db == 1:
car_diff_enabled = list(source_dict.get(algo_name, NONE))
result_enabled[algo_name] = car_diff_enabled
return str(result_enabled),str(result_disabled)
before_data= {
'electric': ['benz1', 'benz2'], 'petrol': ['bmw1', 'bmw2', 'bmw3'], '': ['jaggur1', 'jaggur2','jaggur3']
}
after_data= {
'electric': ['benz1'], 'petrol': ['bmw1','bmw2','bmw3','benz4'], '': ['jaggur4'], 'gas':['ferrai1']
}
# Output that I expect:
#
# Data that has been added
enabled_data {'': ['jaggur4'], 'gas': ['ferrai1'], 'petrol': ['benz4'], 'electric': ' '}
disabled_data {'': ['jaggur2', 'jaggur1', 'jaggur3'], 'petrol': ' ', 'electric': ['benz2']}
非常感谢您的意见和建议!
为了以防万一,我使用Python 2.7。
1条答案
按热度按时间ncecgwcz1#
一旦你更新到Python 3.8+(你真的应该这样做),然后...
输出: