我有一个字典列表,我想选择与单独列表中的键相对应的项目(注意:我们可以假设每个 dict
都包含键)。此外,我想处理所选项目的子集。
举个例子,给定:
keys_of_interest = ['a', 'b']
all_items =[
{'a' : value_a1, 'b' : value_b1, 'c' : ...},
{'a' : value_a2, 'b' : value_b2, 'c' : ...},
...
]
我要的结果是提取a
对应的值得到的和 b
并申请 fun
只到 a
,即:
[
[fun(value_a1), value_b1],
[fun(value_a2), value_b2],
...
]
key 提取部分可以通过以下方式完成:
from operator import itemgetter
[itemgetter(*keys_of_interest)(el) for el in all_items]
是否有任何(优雅的)方法将 itemgetter 与函数结合起来
最佳答案
如果优先考虑优雅,您可以先转换字典,然后使用 itemgetter
而无需进一步调整。为此,您需要将要应用函数的键与只需要原始值的键分开——我认为这在任何情况下都是一件好事。
首先,设置
keys_of_interest = ['a', 'b', 'c', 'd']
keys_for_func = ['a', 'b'] # with this approach you can apply a func to multiple keys
func = lambda x: x ** 2 # for demo
all_dicts = [{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5},
{'a': 6, 'b': 7, 'c': 8, 'd': 9, 'e': 10}]
然后这就是我要做的:
transformed = ({k: func(v) if k in keys_for_func else v for k, v in d.items()}
for d in all_dicts)
result = list(map(itemgetter(*keys_of_interest), transformed))
结果:
[(1, 4, 3, 4), (36, 49, 8, 9)]
关于python - 从字典中过滤项目并处理子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35352946/