【问题标题】:Swap dictionary values交换字典值
【发布时间】:2022-01-22 19:22:41
【问题描述】:

完成给定的名为solve的方法,该方法以字典A为参数。

A 有一些键,但是键 'x' 和 'y' 的值被错误地交换了。您必须将它们放回原来的位置,然后返回字典。

示例输入: {'a': 1, 'b': 200, 'x': 2, 'y': 7}

输出: {'a': 1, 'b': 200, 'x': 7, 'y': 2}

def solve(d):
    d['x'], d['y'] = d['y'], d['x']
    return d

我知道但看不懂!

【问题讨论】:

  • 您的交换函数什么都不做。它重新分配局部变量并终止。 Notgibg 发生变异
  • 你可以尝试用a,b = b,a交换它们

标签: python python-3.x dictionary data-structures


【解决方案1】:

这与 Python 中的可变性有关:内存中的给定对象是否可以更改。您正在为函数提供指向整数对象的变量,这些变量是不可变的。

您可以在 Python 解释器中自行验证。

>>> A = {'a': 1, 'b': 200, 'x': 2, 'y': 7}
>>> x = A['x']
>>> x
2
>>> id(A['x'])
4402888976
>>> id(x)
4402888976
>>> x = 5
>>> id(A['x'])
4402888976
>>> id(x)
4402889072
>>> A
{'a': 1, 'b': 200, 'x': 2, 'y': 7}
>>> x
5

正如您在此示例中看到的,x 最初与A['x'] 具有相同的标识(它们指向内存中保存整数值2 的同一对象)。但是当我们给x分配一个新值时,由于整数是不可变的,Python不会改变2在内存中存储的值;相反,它在内存中分配另一个空间,用于存储整数值5 并将x 指向它。所以x 指向内存中的另一个整数对象,而A['x'] 一直指向它被分配的初始值。你的函数也发生了同样的事情。

现在,字典在 Python 中是可变对象,因此如果您传递字典而不是两个整数,您可以在函数内操作字典,并且您的更改将在函数退出后保留。

>>> A = {'a': 1, 'b': 200, 'x': 2, 'y': 7}
>>> def solve(d):
...     d['x'], d['y'] = d['y'], d['x']
...
>>> solve(A)
>>> A
{'a': 1, 'b': 200, 'x': 7, 'y': 2}

【讨论】:

    【解决方案2】:

    对于字典,您可以使用更新方法

    d = {'a': 1, 'b': 200, 'x': 2, 'y': 7}
    d.update({'x':d['y'], 'y':d['x']})
    
    print(d)
    {'a': 1, 'b': 200, 'x': 7, 'y': 2}
    

    【讨论】:

      【解决方案3】:

      您的代码的问题是您仅在函数的范围内操作ab。您没有返回任何内容,因此当您尝试打印从未返回的内容时程序会崩溃。

      试试这个解决方案:

      dict = {
        "a": 1,
        "b": 200,
        "x": 2,
        "y": 7
      }
      
      def swap(a,b):
          a,b = b,a
          return a,b
          
      def solve(A):
          A['x'], A['y'] = swap(A['x'], A['y'])
          return A
          
      print(solve(dict))
      

      【讨论】:

      • 小说明:在这种情况下程序不会崩溃,但会打印“无”。
      • 感谢您的澄清,您是对的。该程序确实对我崩溃了,但这是我这边的一个错误。它确实返回None
      猜你喜欢
      • 2018-01-14
      • 1970-01-01
      • 2010-11-08
      • 1970-01-01
      • 1970-01-01
      • 2015-10-18
      • 1970-01-01
      • 2015-10-18
      相关资源
      最近更新 更多