Python 如何交换字典中的2个值,给定第3个';钥匙是什么?
假设我有三个键的字典Python 如何交换字典中的2个值,给定第3个';钥匙是什么?,python,dictionary,swap,Python,Dictionary,Swap,假设我有三个键的字典'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): key
'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
为了解决这个问题,我们首先需要找到与输入键不同的两个键。然后,我们只需交换这些键的值
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()
但这只是一个很小的“进步”;使用set
操作将更多的工作转移到C层,避免了对list
的Python层迭代,但是当您谈论迭代三个值时,差别非常小
它使用一个(类似于
dict
键的活动的集
视图)来获得集
操作,以保留未传递的两个键。您可以使用稍微聪明一点的方法来确定要交换的键,方法是:
a, b = d.keys() - {key} # On Py3; on Python 2.7, you'd use d.viewkeys()
但这只是一个很小的“进步”;使用set
操作将更多的工作转移到C层,避免了对list
的Python层迭代,但是当您谈论迭代三个值时,差别非常小
它使用一个(类似于
dict
键的活动set
视图)来获取set
操作,以保留未传递的两个键。我会这样做,以避免使用循环:
def swap(dictS, key):
keys = list(dictS.keys())
keys.remove(key)
dictS[keys[0]], dict[keys[1]] = dictS[keys[1]], dict[keys[0]]
我会这样做,以避免使用循环:
def swap(dictS, key):
keys = list(dictS.keys())
keys.remove(key)
dictS[keys[0]], dict[keys[1]] = dictS[keys[1]], dict[keys[0]]
我觉得你现有的代码不错。它当然可以使用一些更好的名称选择,但除此之外,它简单明了。谢谢你的提示。你建议用什么名字?
\uuu
绝对不是个好选择。这意味着您正在丢弃该值。我建议更改它,但ShadowRanger的建议可以让您完全摆脱变量swap
建议交换其参数的交换操作,key
可以更详细地说明它是如何成为未受影响的键,但最佳替换选择在很大程度上取决于使用此函数的上下文。似乎您的上下文对此操作可能有一个有意义的名称。我觉得您现有的代码很好。它当然可以使用一些更好的名称选择,但除此之外,它简单明了。谢谢你的提示。你建议用什么名字?\uuu
绝对不是个好选择。这意味着您正在丢弃该值。我建议更改它,但ShadowRanger的建议可以让您完全摆脱变量swap
建议交换其参数的交换操作,key
可以更详细地说明它是如何成为未受影响的键,但最佳替换选择在很大程度上取决于使用此函数的上下文。似乎您的上下文对此操作可能有一个有意义的名称。与提问者已有的名称相比,这并不是一个真正的改进。我不希望函数返回d
。它只需要交换值。我误解了这个问题。很抱歉与提问者已有的功能相比,这并不是一个真正的改进。我不希望函数返回d
。它只需要交换值。我误解了这个问题。很抱歉这涉及重复查找以获取值;序列解包是一件好事,应该在适当的时候使用,以避免重复查找相同的值。这涉及重复查找以获取值;序列解包是一件好事,应该在适当的时候使用,以避免重复查找相同的值。