简体   繁体   English

如果字典列表中存在键,则获取值

[英]Get value if key exists in list of dictionary

I have a python list like 我有一个python列表

[{'month': 8, 'total': 31600.0}, {'month': 9, 'total': 2000.0}]

and want to generate it like 并希望生成它像

[
  {'month': 1, 'total': 0},
  {'month': 2, 'total': 0},
  ...
  {'month': 8, 'total': 31600},
  {'month': 9, 'total': 2000},
  ...
  {'month': 12, 'total': 0}
]

for that, I'm running iteration on the range (1,13) 为此,我在范围(1,13)上运行迭代

new_list = []
for i in range(1, 13):
  # if i exists in month, append to new_list
  # else add total: 0 and append to new_list

How can I check if i exists in month and get the dictionary? 如何检查,如果一个月中存在并得到字典?

You can convert your list of dict into direct month: total mapping with 您可以将字典列表转换为直接月份:

monthly_totals = {item['month']: item['total'] for item in data_list}

and use a simple list comprehension with dict.get to handle missing values: 并使用带有dict.get的简单列表理解来处理缺失值:

new_list = [{'month': i, 'total': monthly_totals.get(i, 0)} for i in range(1, 13)]

Create a new list containing the default values and then update the needed values from the original list 创建一个包含默认值的新列表,然后从原始列表中更新所需的值

>>> lst = [{'month': 8, 'total': 31600.0}, {'month': 9, 'total': 2000.0}]
>>> new_lst = [dict(month=i, total=0) for i in range(1,13)]
>>> for d in lst:
...     new_lst[d['month']-1] = d
... 
>>> pprint(new_lst)
[{'month': 1, 'total': 0},
 {'month': 2, 'total': 0},
 {'month': 3, 'total': 0},
 {'month': 4, 'total': 0},
 {'month': 5, 'total': 0},
 {'month': 6, 'total': 0},
 {'month': 7, 'total': 0},
 {'month': 8, 'total': 31600.0},
 {'month': 9, 'total': 2000.0},
 {'month': 11, 'total': 0},
 {'month': 12, 'total': 0}]
exist_lst =  [{'month': 8, 'total': 31600.0}, {'month': 9, 'total': 2000.0}]

new_lst = []

for i in range(1,13):
    found = False
    for dict_item in exist_lst:
        if dict_item['month'] == i:
            new_lst.append(dict_item)
            found = True

    if not found: 
        new_lst.append({'month': i, 'total': 0}) # default_dict_item

print(new_lst)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM