问题描述
{'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,'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',8),('ARE','KLP','POL',4),('DOING','TIS',('GREAT',('WORK','KOE','ROE',('KEEP','PAR','PIL',4,('ROCKING','OUL',6,8)]
解决方法
这些规则的定义不明确,但是我还是会试一试。我假设您只希望将此计算应用于嵌套字典中的键YOU
和WORK
。我认为列表理解将变得非常复杂,并且使用循环更易读。
对于每个键YOU
和WORK
,我总结了8+6,8
和YOU
的{{1}}这两个最里面的值集,将这些值分别乘以8+4,8+6
的{{1}}和WORK
的{{1}},然后将乘积相加得到结果= 14*8
YOU
输出:
12*14
,
注意
通过任何方式不要使用eval
,这是不安全的(“评估是邪恶的”)。
有关eval
有害性的详细信息(太多了,我只是挑了一个),请阅读here。
一些寻求解决方案的灵感
正如我之前其他人和更聪明的人指出的那样,在您提供的示例中,我没有找到关于操作数赋值的任何合理解释。
但是,这是一个尝试-希望它能帮助您应对挑战。
所以你去了:
import json
d = {'YOU': {'HE': {'EST': 8,'OLM': 6},'SLO': {'WLR': 8}},'WORK': {'KOE': {'RIW': 8,'PNG': 4},'ROE': {'ERC': 8,'WQD': 6}}}
# Convet dictionary to a string
r = json.dumps(d)
# Convert string to char list
chars = list(r)
# Legal chars needed for computing
legal_chars = ['{','}',','] + [str(d) for d in range(10)]
# Filtering in only legal chars
filtered_chars = [x for x in chars if x in legal_chars]
# Replacing the {} with () and,with +
expression = ''.join(filtered_chars).replace('{','(').replace('}',')').replace(','+')
# Evaluating expression
result = eval(expression)
# (((8+6)+(12))+((8+4)+(8+6)))=52
print(f'{expression}={result}')