创建交换字典的最简单函数,值应该是具有所有相应键的元组

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 循环,我认为您无法避免它。