python-3.x 如何按值将字典键聚合到列表中?[duplicate]

axkjgtzd  于 2023-02-26  发布在  Python
关注(0)|答案(3)|浏览(150)
    • 此问题在此处已有答案**:

Reverse a dictionary to key : list of values? [duplicate](4个答案)
2天前关闭。
这是我的意见:

data_input = {
   'file1': 'Ravi',
   'file2': 'Shivam',
   'file3': 'Raj',
   'file4': 'Ravi',
   'file5': 'Shivam',
   'file6': 'Shivam',
      }

我想要以下输出:

data_output = {
     'Ravi': ['file1', 'file4'],
     'Shivam': ['file2', 'file5', 'file6'],
     'Raj': ['file3']
   }

请帮我解决这个问题。

gzszwxb4

gzszwxb41#

使用for循环且无defaultdict的解决方案:

output = {}
for key,value in data_input.items():
    if output.get(value,None) == None:
        output[value]=[key]
    else:
        output[value].append(key)

这可以通过如下的默认设置来解决,例如:

data_output = {}
[data_output.setdefault(item, []).append(key) for key,item in data_input.items() if item==data_input[key]]

更多信息可在此处找到:Dictionary Comprehension for list values

v2g6jxz6

v2g6jxz62#

这是我使用setdefault的答案:
数据输出= {}
对于data_input.items()中的v,k:#这里我们反转data_output中的如果k的键/值:数据_输出[k].append(v)否则:数据_输出[k] = [v]
打印(数据输出)

uttx8gqw

uttx8gqw3#

您可以使用setdefault字典的经典循环,并反转输入中的键和值:

data_output = {}

for v, k in data_input.items(): # here we reverse key/value
    data_output.setdefault(k, []).append(v)

输出:

{'Ravi': ['file1', 'file4'],
 'Shivam': ['file2', 'file5', 'file6'],
 'Raj': ['file3']}

相关问题