2016-05-09 3 views
-1

各エントリを数値コードで分類してデータセットを取得しています。最初の2桁だけが必要なので、私はそれらをもとに集計しています。5月または5月に存在しないキーの名前を変更する(Python)

既知の数のカテゴリがありますが、すべてのカテゴリが必ずしもすべてのインスタンスで使用されるとは限りません。 sum_dictには、2桁のカテゴリのエントリがソースデータに含まれている場合にのみ入力されます。

sum_dict = { 
    '12': 15, 
    '29': 3, 
    '33': 22, 
} 

私はもっと説明的であることをsum_dict内のすべてのキーを変更したいので、私は、各キーを削除し、より説明1と交換しています。ただし、辞書の特定のインスタンスで名前を変更したキー(この例では '65')を使用しないと、キーエラーが発生します。

if '12'in sum_dict: 
    sum_dict['12: Alpha'] = sum_dict.pop('12') 
if '29'in sum_dict: 
    sum_dict['29: Beta'] = sum_dict.pop('29') 
if '33'in sum_dict: 
    sum_dict['33: Gamma'] = sum_dict.pop('33') 
if '65'in sum_dict: 
    sum_dict['65: Delta'] = sum_dict.pop('65') 

彼らは毎回存在しない場合でも、私はすべての可能なキーの名前を変更することができるように、私はifチェックを追加しましたが、この作業を行うには、IFSの数十を持っているために非効率的な(と読みにくい)ようです。私はこれを行うより良い方法がないのですか?

答えて

1

があなたの名前のマッピングを作成したい何をすべき:あなたの最初の辞書を作成するとき

better_names = {'12': 'Alpha', '29': 'Beta', '33': 'Gamma', '65': 'Delta'} 

今、あなたはこれらを使用することができ、何の名前の変更は必要ありません:

sum_dict = { 
    '{}: {}'.format(k, better_names[k]): sum(item[1] for item in g) 
    for k, g in groupby(sorted(
     source_data.items()), key=lambda item: item[0][:2]) 
} 

ただし、後で名前を変更する必要があります同じ辞書をループで使用できます:

for key, name in better_names.items(): 
    if key in sum_dict: 
     sum_dict['{}: {}'.format(key, name)] = sum_dict.pop(key) 
2
variable_array = [("12", "Alpha"),("29", "Beta") ... ("65","Delta")] 
for number, var in variable_array: 
    if number in sum_dict: 
     sum_dict["{}: {}".format(number, var)] = sum_dict.pop(number) 

これは、あなたが

関連する問題