2

私は2つの辞書を持っています。

dict1={('SAN RAMON', 'CA'): 1, ('UPLAND', 'CA'): 4, ('POUGHKEESIE', 'NY'): 3, ('CATTANOOGA', 'TN'): 1}

dict2={('UPLAND', 'CA'): 5223, ('PORT WASHING', 'WI'): 11174, ('PORT CLINTON', 'OH'): 6135, ('GRAIN VALLEY', 'MO'): 10352, ('GRAND JUNCTI', 'CO'): 49688, ('FAIRFIELD', 'IL'): 5165}

これらは単なるサンプルであり、実際には各dictには数百のエントリがあります。2つの辞書をマージして、{dict1.values():dict2.values()}を含むdict 3を作成しようとしていますが、その都市が両方のdictに表示されている場合に限ります。したがって、dict3の1つのエントリは次のようになります。

{4:5223}   # for 'UPLAND', 'CA' since it appears in both dict1 and dict2

これは、私が書いているより大きな関数のほんの小さなステップです。私は次のようなことを試みるつもりでした:

for item in dict1.keys():
        if item not in dict2.keys():
            del item
        return dict[(dict1.keys())=(dict2.keys())]

dict1からの苦情の数が、dict2で参照されているのと同じ都市と一致することを確認する方法がわかりません。

4

3 に答える 3

5

これがあなたが欲しいと思うものです(デモ)

dict3 = dict((dict1[key], dict2[key]) for key in dict1 if key in dict2)

少し拡大するとこんな感じ。

dict3 = {}
for key in dict1:
    if key in dict2:
        dict3[dict1[key]] = dict2[key]
于 2012-11-16T23:17:49.007 に答える
0

簡単な方法は、一方のキーのメンバーシップをもう一方のキーで確認することです。

result = {}
for key in dict1:
    if key in dict2:
        result[dict1[key]] = dict2[key]

setそれらをorに変換しfrozensetて交点を取ることもできますが、それが高速になるかどうかはわかりません。

keys_in_both = frozenset(dict1) & frozenset(dict2)
result = dict((dict1[key], dict2[key]) for key in keys_in_both)
于 2012-11-16T23:20:02.357 に答える
0

共通のキーは次のとおりです。

set(dict1.keys()) & set(dict2.keys())

{dict1.values(): dict2.values()} を含む dict 3 を作成します

これは意味がありません。辞書はキーと値のペアです...本当に欲しいものは何ですか? ヒント:

dict3 = {}
for k in set(dict1.keys()) & set(dict2.keys()):
    dict3[dict1[k]]=dict2[k]

{4: 5223}
于 2012-11-16T23:15:24.587 に答える