2

だから私は2つの辞書を持っています:

dic1 = {1.0: 9.0, 3.0: 33.0, 5.0: 13.0}
dic2 = {1.0: 3.4, 3.0: 88.9, 4.0: 73.0, 5.0: 9.0}

それぞれのキーは ID 番号、dic1 の値は評価、dic2 の値はコストです。

私が欲しいのは、各 ID 番号をそのコストと評価の両方に関連付け、その過程で dic1 に一致しないキー dic2 を削除する方法です。

dic3 = {1.0: (9.0, 4.2), 3.0: (33.0, 88.9), 5.0: (13.0, 9.0)}

次に、ID、コスト、評価の列を含む配列を作成できるようにしたいと考えています。

私はこれを行う方法を考えることができませんでした。助言がありますか?

ありがとう!

4

3 に答える 3

3
dic3 = {k : (v1, dic2[k]) for k, v1 in dic1.items() if k in dic2}
于 2013-06-19T19:26:48.607 に答える
1

古いバージョンの Python (2.7 より古い) で動作する、これを試してください:

dic3 = {}
for k in dic1.viewkeys() & dic2.viewkeys():
    dic3[k] = (dic1[k], dic2[k])

または、これは、辞書内包表記を使用して、Python の最近のバージョン (>= 2.7 ただし < 3.0) で機能するアプローチです。

dic3 = { k : (dic1[k], dic2[k]) for k in dic1.viewkeys() & dic2.viewkeys() }

Python 3.0 以降では、キーはすでにセットとして扱われているため、最も優れたソリューションが得られます。

dic3 = { k : (dic1[k], dic2[k]) for k in dic1.keys() & dic2.keys() }

とにかく、両方の辞書に共通のキーを決定する秘訣は、それらのセットを交差させることであり、期待どおりに機能します。

dic3
=> {1.0: (9.0, 3.4), 3.0: (33.0, 88.9), 5.0: (13.0, 9.0)}
于 2013-06-19T19:27:32.353 に答える
1

dict-comprehension を使用dic1.viewkeys() & dic2.viewkeys()して、2 つの辞書からすべての共通キーのセットを返します。

>>> dic1 = {1.0: 9.0, 3.0: 33.0, 5.0: 13.0}
>>> dic2 = {1.0: 3.4, 3.0: 88.9, 4.0: 73.0, 5.0: 9.0}
>>> {k : (dic1[k],dic2[k])  for k in dic1.viewkeys() & dic2.viewkeys()}
{1.0: (9.0, 3.4), 3.0: (33.0, 88.9), 5.0: (13.0, 9.0)}

py2.6 以前の使用の場合dict():

>>> dict( (k , (dic1[k],dic2[k]))  for k in dic1.viewkeys() & dic2.viewkeys())
{1.0: (9.0, 3.4), 3.0: (33.0, 88.9), 5.0: (13.0, 9.0)}

py3.x では、次のように使用しますdict.keys()

>>> {k : (dic1[k],dic2[k])  for k in dic1.keys() & dic2.keys()}
{1.0: (9.0, 3.4), 3.0: (33.0, 88.9), 5.0: (13.0, 9.0)}
于 2013-06-19T19:25:57.767 に答える