将字典转换为数学表达式

{'YOU': {'HE': {'EST': 8, 'OLM': 6}, 'SLO': {'WLR': 8}},

 'ARE': {'KLP': {'EST': 6}, 'POL': {'WLR': 4}},

 'DOING': {'TIS': {'OIL': 8}},

 'GREAT': {'POL': {'EOL': 6}},

 'WORK': {'KOE': {'RIW': 8, 'PNG': 4}, 'ROE': {'ERC': 8, 'WQD': 6}},

 'KEEP': {'PAR': {'KOM': 8, 'RTW': 6}, 'PIL': {'XCE': 4, 'ACE': 8}},

 'ROCKING': {'OUL': {'AZS': 6, 'RVX': 8}}}

需要对字典中的数字进行计算。


    Eg: {'YOU': {'HE': {'EST': 8, 'OLM': 6}, 'SLO': {'WLR': 8}},

 'WORK': {'KOE': {'RIW': 8, 'PNG': 4}, 'ROE': {'ERC': 8, 'WQD': 6}}} for this example the output would be

[(8+6)x8]+[(8+4)x(8+6)]

[14x8]+[12x14]

112+168

280

以下是我尝试过的代码:


a = [tuple([k]+list(v.keys())+list(j.values())) for k,v in data.items() for i,j in v.items()]

它给出:


[('YOU', 'HE', 'SLO', 8, 6),

 ('YOU', 'HE', 'SLO', 8),

 ('ARE', 'KLP', 'POL', 6),

 ('ARE', 'KLP', 'POL', 4),

 ('DOING', 'TIS', 8),

 ('GREAT', 'POL', 6),

 ('WORK', 'KOE', 'ROE', 8, 4),

 ('WORK', 'KOE', 'ROE', 8, 6),

 ('KEEP', 'PAR', 'PIL', 8, 6),

 ('KEEP', 'PAR', 'PIL', 4, 8),

 ('ROCKING', 'OUL', 6, 8)]


繁星coding
浏览 106回答 2
2回答

慕田峪7331174

规则没有明确定义,但无论如何我都会尝试一下。我假设您只想将此计算应用于键YOU和WORK嵌套字典中。我认为列表理解会变得非常复杂,并且使用循环更具可读性。对于每个键YOU和WORK,我总结了这两组最里面的值8+6, 8forYOU和8+4, 8+6for WORK,将这些值相乘在一起14*8forYOU和12*14for WORK,然后将乘积加在一起得到结果 =280dict_nested = {'YOU': {'HE': {'EST': 8, 'OLM': 6}, 'SLO': {'WLR': 8}}, 'ARE': {'KLP': {'EST': 6}, 'POL': {'WLR': 4}}, 'DOING': {'TIS': {'OIL': 8}}, 'GREAT': {'POL': {'EOL': 6}}, 'WORK': {'KOE': {'RIW': 8, 'PNG': 4}, 'ROE': {'ERC': 8, 'WQD': 6}}, 'KEEP': {'PAR': {'KOM': 8, 'RTW': 6}, 'PIL': {'XCE': 4, 'ACE': 8}}, 'ROCKING': {'OUL': {'AZS': 6, 'RVX': 8}}}keys = ['YOU','WORK']result = 0for key in keys:    inner_keys = dict_nested[key].keys()    # multiply the values together for the first values of the inner key    inner_product = 1    for inner_key in inner_keys:        inner_product *= sum(list(dict_nested[key][inner_key].values()))        # print(inner_product)    result += inner_product输出:>>> result280

慕莱坞森

笔记无论如何不要使用eval,它是不安全的(“eval 是邪恶的”)。有关危害性的更多详细信息eval(有太多,我只是挑选了一个)请阅读此处。解决方案的一些灵感正如我之前的其他人和更聪明的人所指出的那样,我在您提供的示例中没有找到有关操作数分配的任何合理解释。然而,这只是一个小小的尝试——希望它能帮助你应对挑战。所以你开始吧:import jsond = {'YOU': {'HE': {'EST': 8, 'OLM': 6}, 'SLO': {'WLR': 8}}, 'WORK': {'KOE': {'RIW': 8, 'PNG': 4}, 'ROE': {'ERC': 8, 'WQD': 6}}}# Convet dictionary to a stringr = json.dumps(d)# Convert string to char listchars = list(r)# Legal chars needed for computinglegal_chars = ['{', '}', ','] + [str(d) for d in range(10)]# Filtering in only legal charsfiltered_chars = [x for x in chars if x in legal_chars]# Replacing the {} with () and , with +expression = ''.join(filtered_chars).replace('{', '(').replace('}', ')').replace(',', '+')# Evaluating expressionresult = eval(expression)# (((8+6)+(12))+((8+4)+(8+6)))=52print(f'{expression}={result}')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python