[英]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},
]
我的目標是為我得到的給定項目創建一個動態字典。 例如,如果我得到第一個項目,我將要產生:
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}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.