在字典的所有值上应用函数

时间:2014-12-17 03:49:33

标签: python dictionary

我的字典看起来像

d= {(1, 8): 94.825000000000003, (2, 8): 4.333}

我正在尝试应用函数来舍入所有值。

我不想重新创建字典。

newD= {}
for x,y in d.iteritems():
   newD+= {x:round(y)}

是否有任何pythonic方式在所有值上应用round函数?

2 个答案:

答案 0 :(得分:6)

您可以尝试这样的事情:

for k, v in d.iteritems():
    d[k] = round(v)

它将对字典中的所有项目进行就地舍入。在这个特定的例子中,它将完美地工作,但要小心 - 使用the round function的所有常规警告都适用。

答案 1 :(得分:6)

这有点令人费解,但你确实要求采用“pythonic-way”方式。 ;)

newD = {k:round(v) for k, v in d.items()}

但是,这种字典理解仅适用于2.7+。如果使用旧版本的Python,请尝试这种更复杂的方式:

newD = dict(zip(d.keys(), [round(v) for v in d.values()]))

让我稍微解压一下:

  • 我们首先按要求将新词典(d)对象重新分配回新词典(尽管您可以轻松地将其分配给相同的名称)
  • 外部dict()确保最终结果是字典对象
  • zip()返回元组列表,其中第i个元组包含每个参数序列中的第i个元素
  • zip()的第一个参数序列是字典键(d.keys()
  • 赋予zip()的第二个参数序列是列表理解后的舍入值
  • 列表推导对字典值中的每个值进行舍入,并返回舍入值列表