我想知道如何重写它以使其更具可读性,所以我和其他人可以理解它而不会有任何混淆:
d1 = {'a':True, 'b':False, 'c':True}
d2 = {'a':False, 'b':True, 'c':True}
# wanted output: False if either value is False, True only if both are True
# d3 = {'a':False, 'b':False, 'c':True}
d3 = {key: (d1[key] and d2[key]) for key in d1}
我不是在寻找最可能的详细版本,而是那些清晰且易读的版本。
答案 0 :(得分:2)
你所拥有的东西对我来说非常人性化。您可能重命名这三个词典更能描述其目的,但就是这样。我认为你要更清楚的唯一方法是将它扩展为一个明确的循环。
# This would be so much nicer with real variable names, don't you agree?
d1_AND_d2 = {}
for key in d1:
d1_AND_d2[key] = d1[key] and d2.get(key) # Use get in case d1 has more keys.
答案 1 :(得分:0)
我用itertools写了它并且得到了一些完全不那么可读的东西:
from itertools import groupby
from operator import itemgetter
d1 = {'a':True, 'b':False, 'c':True}
d2 = {'a':False, 'b':True, 'c':True}
key = itemgetter(0)
value = itemgetter(1)
d3 = {key: all(map(value, values))
for key, values in groupby(sorted(d1.items() + d2.items()), key)}
我觉得你的版本更具可读性。
(我知道这不完全是你所要求的,但这是我在试图提供真实答案时需要与某人分享的结果。