Python-如何在字典中对具有相同值的键进行分组

时间:2019-01-18 07:24:30

标签: python-3.x

我有一个字典,其中包含文件及其所有者。

files = {
      'Input.txt': 'Randy',
      'Code.py': 'Stan',
      'Output.txt': 'Randy'
   }

如何将文件与相似的所有者进行分组以获得类似的内容

{'Randy': ['Input.txt', 'Output.txt'], 'Stan': ['Code.py']}.

2 个答案:

答案 0 :(得分:1)

您可以先检索唯一的名称,然后遍历每个名​​称,将文件分组到该名称下。

# store the names (the keys of the new dict) as a set (keeps elements unique)
names = set(files.values())

# use a list comprehension, iterating through keys and checking the values match each n
d = {}
for n in names:
    d[n] = [k for k in files.keys() if files[k] == n]

您还可以选择dict-comprehension:

d = {n:[k for k in files.keys() if files[k] == n] for n in set(files.values())}

结果:

{'Stan': ['Code.py'], 'Randy': ['Input.txt', 'Output.txt']}

答案 1 :(得分:0)

遍历第一个字典,获取键和值。

对于每个值,检查它是否存在于新的空白/空字典中。如果没有,请添加一个(原始值的)键,并为其分配一个空白数组。

无条件地将对应的原始键添加到数组(在第二个字典中)以获得原始值(作为第二个字典中的键)。

下面的伪代码应该使您入门

dict2 = {}
for (key, value in files):
  if value not in dict2:
    dict2[value] = []
  dict2[value].add(key)
print(repr(dict2))