【发布时间】:2016-07-01 20:16:44
【问题描述】:
needs_eval = "((abc or def) and ghi)"
dict_group = {abc: ['gh@ab.com', 'ab@ab.com', 'ij@ab.com'], def: ['ab@ab.com', 'cd@ab.com', 'ef@ab.com'], ghi: ['cd@ab.com', 'ab@ab.com', 'kl@ab.com', 'gh@ab.com']}
for k,v in dict_group.iteritems():
str_v=str(v[0])
needs_eval = needs_eval.replace("and", "&").replace("or", "|").replace(k,str_v)
#needs_eval = re.sub(k,v[0],needs_eval)
print(list(eval(needs_eval)))
O/p i get: ((['gh@ab.com', 'ab@ab.com', 'ij@ab.com'] | ['ab@ab.com', 'cd@ab.com', 'ef@ab.com']) & ['cd@ab.com', 'ab@ab.com', 'kl@ab.com', 'gh@ab.com'])
当我评估“needs_eval”时,我想要逻辑输出“['cd@ab.com', 'ab@ab.com', 'gh@ab.com']”
我将字典“value”转换为字符串,然后将其替换为“needs_eval”字符串,因为“replace or re.sub”只传递字符串。
【问题讨论】:
-
您需要更清楚地说明这一点,我认为在没有指导的情况下让人们阅读您的代码并弄清楚您要做什么是不公平的。据我所知,该字典声明应该会引发错误,因为 abc、def 和 ghi 没有在任何地方声明。
-
如何在预期输出中得到
kl@ab.com? -
感谢大家指出错误的代码。我已经删除了底部并更改了预期的 o/p。
-
还有,你为什么使用
eval?这似乎是xy problem 的重中之重。你到底想做什么?我有一个比eval更好的解决方案...