web-dev-qa-db-ja.com

2つの異なるpythonカウンターオブジェクトの比較

私はPythonで、ユーザー入力を受け取り、文字列を別の文字列にするために追加する必要のある新しい文字を伝えるアルゴリズムに取り組んでいます。 Counterメソッドによって作成された辞書でたくさん遊んでいます。

文字列から文字を数えている2つの異なる辞書を比較したいと思います(コレクションモジュールのカウンターツールを使用して返されたオブジェクトなど)。これらの辞書をD1およびD2と呼ぶことができます。結果として得られる2つの辞書(R1とR2)が必要です。1つ目は2つの共有文字で、2つ目はR1をR2にするために必要な文字(D2にはあるがD1にはない文字)です。

例えば:

# assuming they’ve been converted from counter objects into regular 
dictionaries #

D1 = {‘A’: 2, ‘B’: 1, ‘C’: 4, ‘D’: 5}
D2 = {‘A’: 3, ‘B’: 4, ‘C’ : 4, ‘D’: 7}

# Some sort of comparison function executed here #

結果:

R1={‘A’: 2, ‘B’: 3, ‘C’: 4, ‘D’: 5} 
R2 = {‘A’: 1, ‘B’: 1, ‘C’: 0 , ‘D’: 2} 
5
Nick Hart
IntersectCounter=[]
for each in D1:
        if D1[each]==D2[each]:
              IntersectCounter.append(each)

これにより、カウンターD1とD2の両方に共通のコンテンツが提供されます。

1
Jai Balaj

私は質問を理解することができませんでしたが、私の理解から:

R1 = {k: min(v, D2[k]) for k, v in D1.items()}
R2 = {k: abs(v - D2[k]) for k, v in D1.items()}

結果

>>> {k: min(v, D2[k]) for k, v in D1.items()}
{'A': 2, 'B': 1, 'C': 4, 'D': 5}
>>> {k: abs(v - D2[k]) for k, v in D1.items()}
{'A': 1, 'B': 3, 'C': 0, 'D': 2}
0
user10356004