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

时间:2020-05-23 10:45:33

标签: python dictionary grouping

我有以下字典

{'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']]

4 个答案:

答案 0 :(得分:1)

您可以使用dict.setdefault

进行尝试
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']]

或使用collection.defaultdict

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']]

答案 1 :(得分:1)

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']]

只需翻转值并创建具有值和要对其进行迭代的键列表的新字典就可以了。只需在反向字典中查找重复值即可。

答案 2 :(得分:0)

您可以使用类似这样的内容:

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]]

答案 3 :(得分:0)

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

print(d)

l=[[],[],[],[],[],[]]

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

print(l) 

给予

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