1

さて私は次の辞書を持っています:

 {'3d1011c0bade5f0a064f7daeef09e7acf900cfe8af09e025859b3426': ['mils news 02122002_0005.txt', 1] }

どこ

 ['mils news 02122002_0005.txt', 1]

リストです。そして今、私は次のものを持っています:

result_array = {k: db_array.get(k, 0)[1] + db_array.get(k, 0)[1] for k in set(db_array) | set(db_array)}

これで、リストにある数を別の辞書と合計したいと思います。だから私の質問は、辞書を変更しないようにする方法です、coz私は次のようになります:

{'3d1011c0bade5f0a064f7daeef09e7acf900cfe8af09e025859b3426': 2}

結果として。

期待される出力:

{'3d1011c0bade5f0a064f7daeef09e7acf900cfe8af09e025859b3426': ['mils news 02122002_0005.txt', 2] }

ユーザーの最初の答えによると、ソリューションのtnxですが、さまざまなキーに対して次のようになります。

db_array = {'a': ['mils news 02122002_0005.txt', 3]}
>>> result_array = {'b': ['mils news 02122002_0005.txt', 3]}
>>> result_array = {k: [db_array[k][0],db_array[k][1] + result_array.get(k, ['', 0])[1]] for k in set(db_array) | set(result_array)}
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <dictcomp>
KeyError: 'b'
4

1 に答える 1

3

dictジェネレーター式にdb_array[k][0]値を含めます。

dv = ['', 0]
result_array = {k: [
        db_array.get(k, result_array.get(k))[0],
        db_array.get(k, dv)[1] + result_array.get(k, dv)[1]
    ] for k in set(db_array) | set(result_array)}

['', 0]キーがどちらのdictにもまだ存在しない場合は、デフォルト値をに更新した(そして読みやすさを向上させるために変数を使用した)ことに注意してください。リストの最初の項目では、キーがdb_arrayに存在しなかった場合、result_arrayにフォールバックすることに注意してください。キーは常に2つのdictの少なくとも1つに存在します。これにより、文字列値が空になることはありません。

キーがresult_arraydictにない場合は、int0を使用して配列としてインデックスを作成するため、元のデフォルトで問題が発生します。

>>> result_array.get('foobar', 0)[1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not subscriptable

(元のコードを示すコメントを反映するように更新されました)。

于 2012-05-22T09:33:58.730 に答える