我目前正在做一个项目,我有一个字典列表,我想在其中应用一些函数。假设我有这样一个字典列表:
l1 = [{"year":"<year>", "df":"<df1>"}, {"system":"<system>","df":"<df2>"}, {"year":"<year>","month":"<month>","system":"<system>","df":"<df3>"}]
我要做的是从每个字典中提取元素df所以我的输出将是:
l2 = [{year:<year>}, {system:<system>}, {year:<year>,month:<month>,system:<system>}]
我该怎么做?
这可以使用dict.pop()
方法完成。
l1 = [{"year":"<year>", "df":"<df1>"}, {"system":"<system>","df":"<df2>"}, {"year":"<year>","month":"<month>","system":"<system>","df":"<df3>"}]
for item in l1:
item.pop('df')
print(l1)
注意,这会从字典中删除dt
字段。
假设您希望在不修改l1
的情况下完成此操作,您可以使用字典推导来创建一个没有问题键的新字典:
{k:v for k,v in d.items() if k != 'df'}
使用列表推导式对列表中的每个项执行此操作:
l1 = [{"year":"<year>", "df":"<df1>"}, {"system":"<system>","df":"<df2>"}, {"year":"<year>","month":"<month>","system":"<system>","df":"<df3>"}]
# for each dict(d) in l1, make a new dict of all k/v pairs except 'df'
l2 = [{k:v for k,v in d.items() if k != 'df'} for d in l1]
print(l2)
# [{'year': '<year>'}, {'system': '<system>'}, {'year': '<year>', 'month': '<month>', 'system': '<system>'}]
您可以使用pop方法删除列表项上的键,但是如果您想在列表中保留原始字典,则需要创建副本以形成新列表:
l1 = [{"year":"<year>", "df":"<df1>"},
{"system":"<system>","df":"<df2>"},
{"year":"<year>","month":"<month>","system":"<system>","df":"<df3>"}]
l2 = [d for d in map(dict.copy,l1) if [d.pop('df')]]
print(l2)
[{'year': '<year>'},
{'system': '<system>'},
{'year': '<year>', 'month': '<month>', 'system': '<system>'}]