我有一个词典列表,其中一个词典有许多键,并且只想将每个词典的键价值过滤到列表中。我使用下面的代码但没有工作......
print [b for a:b in dict.items() if a='price' for dict in data]
提前感谢您的帮助!
答案 0 :(得分:5)
我认为您需要以下内容(如果data
是您的“词典列表”):
[d.get('price') for d in data]
我正在做的是,迭代dicts列表和每个dict使用get('price')
(因为get()
不会抛出关键异常)来读取'price'键的值。
注意:避免使用'dict'作为变量名,因为它是构建内类型名称。
示例:
>>> data = [ {'price': 2, 'b': 20},
{'price': 4, 'a': 20},
{'c': 20}, {'price': 6, 'r': 20} ] # indented by hand
>>> [d.get('price') for d in data]
[2, 4, None, 6]
>>>
您可以删除输出列表中的None
,方法是将明确的if-check添加为:[d['price'] for d in data if 'price' in d]
。
对代码的评论:
[b for a:b in dict.items() if a='price' for dict in data]
a:b
应该是a, b
a='price'
应为a == 'price'
(misspell == operator as =)这不是错误,使用内置类型名称作为变量名称是不好的做法。你不应该使用'dict','list','str'等作为变量(或函数)名称。
正确的代码形式是:
[b for dict in data for a, b in dict.items() if a == 'price' ]
for a, b in dict.items() if a == 'price'
循环是不必要的 - 简单get(key)
,setdefualt(key)
或[key]
无需循环即可更快地运行。