基于相同的值将字典键分组到列表列表

2024-05-16 18:54:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的字典

{'u1': 0, 'u2': 0, 'u3': 1, 'u4': 2, 'u5': 2, 'u6': 3, 'u7': 4, 'u8': 4, 'u9': 3}

我想获得:

[['u1', 'u2'], ['u3'], ['u4', 'u5'], ['u6', 'u9'], ['u7', 'u8']]

Tags: 字典u1u2u6u3u7u8u5
3条回答

您可以使用以下内容:

dictionary={'u1': 0, 'u2': 0, 'u3': 1, 'u4': 2, 'u5': 2, 'u6': 3, 'u7': 4, 'u8': 4, 'u9': 3}
[[k,v] for k,v in dictionary.items()]

结果:

[['u1', 0], ['u2', 0], ['u3', 1], ['u4', 2], ['u5', 2], ['u6', 3], ['u7', 4], ['u8', 4], ['u9', 3]]

您可以使用^{}尝试此操作

d = {'u1': 0, 'u2': 0, 'u3': 1, 'u4': 2, 'u5': 2, 'u6': 3, 'u7': 4, 'u8': 4, 'u9': 3}
new = dict()

for k,v in d.items():
    new.setdefault(v,[]).append(v)

list(out.values())
# [['u1', 'u2'], ['u3'], ['u4', 'u5'], ['u6', 'u9'], ['u7', 'u8']]

或使用^{}

from collection import defaultdict
new = defaultdict(list)

for k,v in d.items():
    new[v].append(k)

list(new.values())
# [['u1', 'u2'], ['u3'], ['u4', 'u5'], ['u6', 'u9'], ['u7', 'u8']]
ini_dict = {'u1': 0, 'u2': 0, 'u3': 1, 'u4': 2, 'u5': 2, 'u6': 3, 'u7': 4, 'u8': 4, 'u9': 3}
flipped = {}
for key, value in ini_dict.items():
    if value not in flipped:
        flipped[value] = [key]
    else:
        flipped[value].append(key) 

输出将是

Result [['u1', 'u2'], ['u3'], ['u4', 'u5'], ['u6', 'u9'], ['u7', 'u8']]

简单地翻转这些值并创建一个新的字典,其中包含值和它们被迭代的键列表,就可以发挥神奇的作用。只需在反向字典中查找重复的值

相关问题 更多 >