给定第 3 个键,如何交换字典中的 2 个值?

How to swap 2 values in a dictionary, given the 3rd's key?

假设我有一个包含 3 个键 'x''y''z' 的字典。我需要做的是编写一个函数,给定 'x' 作为参数,交换存储在 'y''z'.

中的值
def swap(d, key):
    a, b = [_ for _ in d if _ != key]
    d[a], d[b] = d[b], d[a]

这就是我的想法,但我正在寻找一种更简单明了的方法。据您所知,有没有?

要解决这个问题,我们首先需要找到与输入键不同的两个键。然后我们只需交换这些键的值。

def swap(d, key):
   keys_to_swap = []
   for k in d:
       if k != key:
           keys_to_swap.append(k)
   # keys_to_swap are the keys that need to be swapped
   # Swap now
   temp = d.get(keys_to_swap[0])
   d[keys_to_swap[0]] = d.get(keys_to_swap[1])
   d[keys_to_swap[1]] = temp
   return d

你原来的答案是正确的,但你没有返回d。 所以要更正您的解决方案:

def swap2(d, key):
    a, b = [_ for _ in d if _ != key]
    d[a], d[b] = d[b], d[a]
    return d #Added this line

您可以使用一种稍微更聪明的方法来确定要交换的密钥:

a, b = d.keys() - {key}  # On Py3; on Python 2.7, you'd use d.viewkeys()

但这是一个很小的问题 "improvement";使用 set 操作将更多工作转移到 C 层,避免了 list 理解的 Python 层迭代,但是当你谈论迭代三个值时,差异是非常微不足道的。

它使用 KeysViewdict 键的 set-like 视图)进行 set 操作以保留两个键通过。

我会这样做,以避免使用循环:

def swap(dictS, key):
    keys = list(dictS.keys())
    keys.remove(key)
    dictS[keys[0]], dict[keys[1]] = dictS[keys[1]], dict[keys[0]]