【问题标题】:Change all values of dictionary with tuple keys in python在python中使用元组键更改字典的所有值
【发布时间】:2018-04-02 16:55:24
【问题描述】:

我目前正在尝试更改大型字典中的所有值(变为负值)。我希望声明在一行中。我有以下字典示例:

dict = {(0,0): 1, (2, 4): 2}

我想要的是

newdict = {(0,0): -1, (2, 4): -2}

我首先尝试了几种变体

newdict = {x: -x for x in dict}

但是,我总是得到以下错误

TypeError: bad operand type for unary -: 'tuple'

我需要能够循环遍历元组键来更改所有值的东西。

【问题讨论】:

  • newdict = {key: -val for key, val in dict.items()}
  • newdict = {x: -your_dict[x] for x in your_dict}newdict = {k: -v for k, v in your_dict.items()}。另外,不要使用dict 作为变量名,你不想隐藏内置...
  • x 在您的示例中是关键。你想否定这个值。
  • 哦,哇!我觉得很傻。谢谢!我是 python 新手,忘记了你可以这样使用 key 和 val。
  • 如果您发现一个有用的答案,请随时接受该答案

标签: python for-loop tuples


【解决方案1】:

您试图将字典中的值设置为旧字典中 key 的负数,而不是旧字典中 value 的负数。因此,您试图将其设置为元组的负数。元组没有“否定”运算符,所以你得到TypeError

您想要的是,就像提到的 cmets 一样:

    newdict = {key:-dict[key] for key in dict}

【讨论】:

    【解决方案2】:

    正如@zwer 在上面的 cmets 中提到的,仅使用一行代码的最有效方法是使用以下代码:

    newdict = {x: -your_dict[x] for x in your_dict}
    

    这是如何工作的,您首先要创建一个名为 newdict 的新字典。

    当你声明你使用{x: -your_dict[x] for x in your_dict}的字典时。

    这样做是在大括号内使用 for 循环(告诉编译器它是一个字典),它将设置所有值。

    您收到 TypeError 的原因是您不能在元组上使用否定运算符 -

    【讨论】:

      【解决方案3】:
      newdict = {x: -x for x in dict}
      

      x 来自dict,好吗?这意味着 x 是您字典中的 key。你的字典中的键是元组,所以x是一个元组。所以-x 是一个错误(因为一元运算符- 没有为元组定义)。

      您想要的是更改values,而不是keys。所以一种可能的解决方案可能是

      newdict = {x: -dict[x] for x in dict}
      

      因为键x的原始值是dict[x]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-01-27
        • 1970-01-01
        • 1970-01-01
        • 2014-01-05
        • 1970-01-01
        • 2013-08-06
        • 1970-01-01
        • 2017-02-03
        相关资源
        最近更新 更多