创建交换字典的最简单函数,值应该是具有所有相应键的元组
Simplest function that creates swapped dictionary there values should be tuples with all corresponding keys
我写了一个函数,可以在彼此之间更改值和键。但我需要只使用 一个循环“FOR”
使其变得 更简单
IF - 否则不允许
def swap_dict(d):
swapped_dict = {}
for key, value in d.items():
if value in swapped_dict:
swapped_dict[value].append(key)
else:
swapped_dict[value] = [key]
for key in swapped_dict.keys():
swapped_dict[key] = tuple(swapped_dict[key])
return swapped_dict
print(swap_dict({1: 2, 3: 4, 5: 4, 7: 2, 9: 4}))
def swap_dict(d):
swapped_dict = {}
for key, val in d.items():
swapped_dict.setdefault(val, set()).add(key)
for key in swapped_dict.keys():
swapped_dict[key] = tuple(swapped_dict[key])
return swapped_dict
print(swap_dict({1: 2, 3: 4, 5: 4, 7: 2, 9: 4}))
您可以通过在每次出现相同的键时重新创建 tuple
值来在一个循环中低效地完成此操作:
def swap_dict(d):
swapped_dict = {}
for key, value in d.items():
swapped_dict[value] = swapped_dict.get(value, tuple()) + (key,)
return swapped_dict
更新:使用get()
方法替换if/else
您只需要查找具有您要查找的值的所有键,这样您就不需要第二个 for
循环来从列表映射到元组。
def swap_dict(d):
swapped_dict = {}
for value in set(d.values()):
swapped_dict[value] = tuple([k for k,v in d.items() if v==value])
return swapped_dict
print(swap_dict({1: 2, 3: 4, 5: 4, 7: 2, 9: 4}))
不过,列表理解是一种 for 循环,我认为您无法避免它。
我写了一个函数,可以在彼此之间更改值和键。但我需要只使用 一个循环“FOR”
使其变得 更简单IF - 否则不允许
def swap_dict(d):
swapped_dict = {}
for key, value in d.items():
if value in swapped_dict:
swapped_dict[value].append(key)
else:
swapped_dict[value] = [key]
for key in swapped_dict.keys():
swapped_dict[key] = tuple(swapped_dict[key])
return swapped_dict
print(swap_dict({1: 2, 3: 4, 5: 4, 7: 2, 9: 4}))
def swap_dict(d):
swapped_dict = {}
for key, val in d.items():
swapped_dict.setdefault(val, set()).add(key)
for key in swapped_dict.keys():
swapped_dict[key] = tuple(swapped_dict[key])
return swapped_dict
print(swap_dict({1: 2, 3: 4, 5: 4, 7: 2, 9: 4}))
您可以通过在每次出现相同的键时重新创建 tuple
值来在一个循环中低效地完成此操作:
def swap_dict(d):
swapped_dict = {}
for key, value in d.items():
swapped_dict[value] = swapped_dict.get(value, tuple()) + (key,)
return swapped_dict
更新:使用get()
方法替换if/else
您只需要查找具有您要查找的值的所有键,这样您就不需要第二个 for
循环来从列表映射到元组。
def swap_dict(d):
swapped_dict = {}
for value in set(d.values()):
swapped_dict[value] = tuple([k for k,v in d.items() if v==value])
return swapped_dict
print(swap_dict({1: 2, 3: 4, 5: 4, 7: 2, 9: 4}))
不过,列表理解是一种 for 循环,我认为您无法避免它。