Python 对字典的所有值应用函数

Python 对字典的所有值应用函数,python,dictionary,Python,Dictionary,我有一本看起来像的字典 d= {(1, 8): 94.825000000000003, (2, 8): 4.333} 我试图应用一个函数来对所有值进行四舍五入 我不想重编字典 newD= {} for x,y in d.iteritems(): newD+= {x:round(y)} 是否有任何python方法可以对所有值应用round函数 您可以尝试以下方法: for k, v in d.iteritems(): d[k] = round(v) 它将对字典中的所有项目进行就

我有一本看起来像的字典

d= {(1, 8): 94.825000000000003, (2, 8): 4.333}
我试图应用一个函数来对所有值进行四舍五入

我不想重编字典

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

是否有任何python方法可以对所有值应用
round
函数

您可以尝试以下方法:

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

它将对字典中的所有项目进行就地四舍五入。在这个特定的例子中,它将完美地工作,但是要小心-所有正常的使用注意事项都适用。

这有点复杂,但您确实要求使用“pythonic方式”;)

但是,此词典理解仅适用于2.7+。如果使用较旧版本的Python,请尝试以下更复杂的方法:

newD = dict(zip(d.keys(), [round(v) for v in d.values()]))
让我把它稍微打开一点:

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

您的示例实际上不起作用,而且您似乎正在通过制作
newD
来重新创建字典,如果我错了,请纠正我,它不是重复的。这是不同的。你正在对字典中的一个关键元组成员进行取整,这怎么可能是答案呢?@jamylak对不起,我不明白你的问题?我迭代字典中的每个键、值对,计算一个新值并替换字典中的旧值。尝试在您的电脑中打印k,vloop@jamylak-呸!你说得对,我没有添加.iteritems()。现在编辑回复您的答案现在没有错,但我不知道这是否是OP想要的,问题很不明确,或者您可以只写
d={k:round(v)代表k,v in d.items()}
,但问题明确表示“我不想重新创建字典”。@Bogdan good point,更新。谢谢优雅的解决方案@DanI很抱歉,这根本不是一个优雅的解决方案,绝对不是pythonic。但是第二个代码非常好
newD = dict(zip(d.keys(), [round(v) for v in d.values()]))