如何使这本字典理解更具可读性

时间:2013-10-29 20:53:48

标签: python dictionary list-comprehension human-readable

我想知道如何重写它以使其更具可读性,所以我和其他人可以理解它而不会有任何混淆:

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}

我不是在寻找最可能的详细版本,而是那些清晰且易读的版本。

2 个答案:

答案 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)}

我觉得你的版本更具可读性。

(我知道这不完全是你所要求的,但这是我在试图提供真实答案时需要与某人分享的结果。