我正在获取一个数据集,每个条目都用数字代码分类。只需要前两位数,所以我只是基于那些来总结。
sum_dict = {
k: sum(item[1] for item in g)
for k, g in groupby(sorted(
source_data.items()), key=lambda item: item[0][:2])
}
已知数量的类别,但并非每个类别都使用所有类别。如果{2}类别出现在源数据中,则sum_dict
将只有2位数类别的条目。
sum_dict = {
'12': 15,
'29': 3,
'33': 22,
}
我想更改sum_dict
中的所有键更具描述性,因此我删除了每个键并将其替换为更具描述性的键。但是,如果字典的特定实例不使用我重命名的键(在此示例中为“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来执行此任务。我错过了更好的方法吗?
答案 0 :(得分: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)
这应该做你想要的事情
答案 1 :(得分: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)