3

これを読みやすくするためにこれを書き直す方法を考えているので、私とおそらく他の人が将来混乱することなく理解できるようになります。

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}

私は可能な限り詳細なバージョンを探しているわけではありませんが、明確で人間が読めるものだけを探しています。

4

2 に答える 2

2

あなたが持っているものは、私には非常に人間が読めるように見えます。3 つの辞書の名前を変更して、その目的をよりわかりやすくすることもできますが、それだけです。明確にする唯一の方法は、明示的なループに展開することだと思います。

# 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.
于 2013-10-29T20:57:54.880 に答える
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)}

あなたのバージョンの方がはるかに読みやすいと思います。

(それはあなたが求めていたものとまったく同じではないことは知っていますが、本当の答えを出そうとしたときに思いついたもので、誰かと共有する必要がありました。)

于 2013-10-29T21:24:42.273 に答える