在python中使用字典列表提取元素



我目前正在做一个项目,我有一个字典列表,我想在其中应用一些函数。假设我有这样一个字典列表:

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>'}]

最新更新