对字典的所有值应用函数

2024-04-29 05:28:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本看起来像

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

我试图用一个函数来求所有的值。

我不想重新编字典。

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

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


Tags: 方法函数infor字典pythonicrounditeritems
2条回答

这有点复杂,但你确实要求一种“Python式的方式”;)

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()]))

让我把这个打开一点:

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

你可以试试这样的:

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

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

相关问题 更多 >