2011-08-20 6 views
5

dictのキーをより短いバリエーションに置き換えて、コンパクトな形式でワイヤを介して送信できるようにしたいと考えています。 dictに新しいアイテムを作成し、古いアイテムを削除するのではなく、キーを更新する方法はありますか?私が今やっている何をPython dictのキーを効率的に変更する

>>> a = dict(long_key=None) 
>>> a.update_key('long_key', 'l') 

私はdictの内部がわからないよ:私がやりたい何

>>> a = dict(long_key=None) 
>>> a['l'] = a['long_key'] 
>>> del a['long_key'] 

はこのようなものです。しかし、update_keyのようなものは、古い鍵を削除する必要を避けることができるかもしれないようです。

+0

あなたはスペース効率、時間効率、またはコードの優雅さをお探しですか? – Claudiu

+7

あなたのトランスポートを圧縮することは、あなたのデータを難読化することよりも、おそらく衛生的な解決策です。 –

+2

私はこのアプローチについての批判に答えるために、私はPythonのdictがどのように動作するかを学ぶことに興味があるので、質問しました。これらの小さなスニペットは、私がやっていることの全体を表現するものではなく、質問をより明確にするための私の意図を示すためだけに役立ちます。あなたの主題が気に入らないということを根拠にしてQを下降させるのはちょっとちょっとです。質問は不明瞭または不明確であるため、下書きする必要があります。 –

答えて

3

よりエレガントな解決策は、本質的にわずかに異なる簡易コピーを作成...新しい辞書を作成することがあります

a_send = dict((k[0], v) for k,v in a.items()) 

確かにかかわらず、少ないスペース効率になること - あなたはスペース効率を探しています、時間効率、またはコードの優雅さ?

+0

おそらく最善の方法はジェネレータ表現の形式です。 –

1

何回送信する必要がありますか?たぶん何かを変更する代わりに、あなたは行くようにキーを処理することができますか?

の代わりに(推測擬似コード)のようなものをやって:あなたはそれを何度も送信する必要がある場合、あなたはまたのマップを作成することができます

for k,v in long_dict: 
    send_over(shorten(k),v) 

short_dict = shorten_keys(long_dict) 
for k,v in short_dict: 
    send_over(k,v) 

のような何かを行います長い - >短いキーと送信中に使用します。コピーを作成するスペース/時間を無駄にすることが最適な解決策ではないかもしれません。

0
longer = dict(long_key=None) 
mapping = dict(long_key='l') 
shorter = dict((mapping[k], v) for k,v in longer.iteritems()) 
3

これは早すぎる最適化です。本当に帯域幅を節約したい場合は、データnormallyを圧縮するか、より単純なデータ構造を使用してください。

関連する問題