-4

if/else ステートメントに等しいライナーを考えてもらえますか:

d = dict()

key = 1, 2

if key in d:
    d[key]['idx'] += [2]
else:
    d[key] = {'idx': [2]}

print d

?

編集:ありがとう。あなたは私を collection.defaultdict & dict.setdafault に絞り込みました。これを念頭に置いて、私が望んでいたことを達成することができました:

from collections import defaultdict

d = dict()
key = 1, 2
d.setdefault(key, {'idx': []})
d[key]['idx'] += [2]

2 行 (setdefault() 呼び出しとその場での追加) にまたがるため、1 つのライナーではないかもしれませんが、見栄えは良くなります。

それでも、誰かがそれを現実のものにする方法を知っているなら、それを共有してください.

4

3 に答える 3

3

場合によっては、複数行で行う方がよい場合もありますが、これはその 1 つです。ただし、この種の「このキーは存在しますか」というロジックを回避しようとすることが合理的な場合もあります。これを行うには、 collections.defaultdictまたはdict.setdefault(). そして今、ただの楽しみとして、使用すべきではない恐ろしいワンライナーを次に示します (ただし、動作は if/else と同等です)。

d.setdefault(key, {'idx': []})['idx'] += [2] if d[key]['idx'] else [1]

これは、追加のルックアップが必要であり、使用するたびに不要なオブジェクトが作成されるため、元のバージョンよりも効率が悪いことに注意してください。

于 2012-11-07T00:06:37.797 に答える
0
key=1,2
d={key:'idx'}
d[key]['idx'] = d[key]['idx']+[2] if key in d else ['2']
于 2012-11-07T02:48:36.693 に答える
0

多分:

d = dict()
key = 1,2

d[key] = (d[key]['idx'] + [2] if key in d and 'idx' in d[key] else {'idx': [2]})
于 2012-11-07T01:55:40.740 に答える