给定第 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 层迭代,但是当你谈论迭代三个值时,差异是非常微不足道的。
它使用 KeysView
(dict
键的 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]]
假设我有一个包含 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 层迭代,但是当你谈论迭代三个值时,差异是非常微不足道的。
它使用 KeysView
(dict
键的 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]]