【问题标题】:Apply functions to values of dictionaries将函数应用于字典的值
【发布时间】:2015-03-19 01:31:02
【问题描述】:

我有一个字典列表L,其中字典具有相同的键集。

我有另一个字典d,它也有与以前的字典相同的键集。

对于键集中的每个key,d[key] 是一个可以应用于L[i][key] 的函数,即d[key](L[i][key])。

我想重置L中字典的值,使用d的值中的函数,即

L[i][key] = d[key](L[i][key])

对于所有key 和所有i。

我怎样才能以更 Pythonic 的方式做到这一点?谢谢。

例如

d = {'a':int, 'b':myfun, 'c':yourfun}

L[1] = {'a':`10`, 'b':5, 'c':1.4}

其中int是一个类型转换函数int(),myfun是一个可以接受整数作为参数的函数,yourfun是另一个可以接受浮点数作为参数的函数。

【问题讨论】:

  • 举个例子会更好。
  • 天哪。我会说没有 pythonic 的方式来做一件 unpythonic 的事情。您能否以不涉及这种方法的方式实现目标?
  • 理想情况下,我认为您应该有一个像这样的大字典:{'key1': {'fn':func, 'L': [L[0]['key1'], L[1]['key1'], etc. ]}, 'key2': ... etc } 如果所有数据都与键相关,则应该按键分组,不是吗?为什么要使用具有相同键集的单独字典?
  • @Shashank:感谢您的提问。我也有同样的问题。见stackoverflow.com/questions/29136156/…

标签: python dictionary


【解决方案1】:

您可以使用列表和字典推导以正确的值重新生成 L:

L = [{k: d[k](v) for (k, v) in l.iteritems()} for l in L]

【讨论】:

  • 谢谢。所有给定的字典都是 collections.OrderedDict,并且在它们的键中具有相同的顺序。您的方式将创建一个无序的字典。如何以与给定字典相同的顺序创建 collections.OrderedDict?
猜你喜欢
  • 2016-01-01
  • 2019-05-05
  • 1970-01-01
  • 2019-12-05
  • 2020-01-29
  • 2019-07-29
  • 1970-01-01
  • 2020-05-17
  • 2019-04-30
相关资源
最近更新 更多