Python - 根据另一个字典中给定的 key:values 数量,在新字典中动态创建 key:values 数量

Python - dynamically create number of key:values in a new dictionary, based on given number of key:values from another dictionary

我有一个从我的数据库中获得的字典列表。每个字典最多可以有 4 个值字段(取决于此项具有的组数)。例如:

list_of_items = [
    {'name':'i am first','value_group_1':10, 'value_group_2':20},
    {'name':'i am second','value_group_1':20, 'value_group_2':40}
    {'name':'i am third','value_group_1':15, 'value_group_2':30, 'value_group_3':40},
    {'name':'i am forth','value_group_1':20, 'value_group_2':40, 'value_group_3':40, 'value_group_4':40},
]

我的目标是为每个我得到的给定项目创建一个动态字典。 例如,如果我得到第一个项目,我将要 yield:

item = list_of_items[0] # first item happen to have 2 groups
final_dict = {'calculated_value_g1':item.get('value_group_1')*100,
              'calculated_value_g2':item.get('value_group_2')*100}

如果我得到第 4 个项目,我将要放弃:

item = list_of_items[3] # forth item happen to have 4 groups
final_dict = {'calculated_value_g1':item.get('value_group_1')*100,
              'calculated_value_g2':item.get('value_group_2')*100,
              'calculated_value_g3':item.get('value_group_3')*100,
              'calculated_value_g4':item.get('value_group_4')*100}

您可以开始将您的逻辑分成更小的部分,遍历 list_of_items,过滤 keys,为每个 key 生成新名称,计算新值,最后构建 dictionary,例如:

list_of_items = [
    {'name':'i am first','value_group_1':10, 'value_group_2':20},
    {'name':'i am second','value_group_1':20, 'value_group_2':40},
    {'name':'i am third','value_group_1':15, 'value_group_2':30, 'value_group_3':40},
    {'name':'i am forth','value_group_1':20, 'value_group_2':40, 'value_group_3':40, 'value_group_4':40},
]


def create_dict(d):
    output = {}
    for k, v in d.items():
        if k == 'name': continue

        new_key = f"calculated_value_g{k[-1]}"
        new_value = v * 100
        output[new_key] = new_value

    return output


results = [
    create_dict(d) for d in list_of_items
]

for d in results:
    print(d)

>>> {'calculated_value_g1': 1000, 'calculated_value_g2': 2000}
>>> {'calculated_value_g1': 2000, 'calculated_value_g2': 4000}
>>> {'calculated_value_g1': 1500, 'calculated_value_g2': 3000, 'calculated_value_g3': 4000}
>>> {'calculated_value_g1': 2000, 'calculated_value_g2': 4000, 'calculated_value_g3': 4000, 'calculated_value_g4': 4000}