Python|按值对字典键进行分组
在对字典进行计算时,我们可能会遇到一个问题,我们可能必须执行根据值对键进行分组的任务,即创建一个键列表,它是值。在机器学习的情况下组织数据的情况下,这可能是其他情况。让我们讨论一下可以执行此任务的特定方式。
方法:使用 sorted() + items() + defaultdict()
可以通过组合上述功能可以完成的任务来执行此任务。 defaultdict() 用于创建用列表初始化的字典, items() 获取键值对,而 sorted() 帮助分组。
Python3
# Python3 code to demonstrate working of
# Grouping dictionary keys by value
# Using sorted() + items() + defaultdict()
from collections import defaultdict
# Initialize dictionary
test_dict = {'gfg' : 1, 'is' : 2, 'best' : 1, 'for' : 3, 'CS' : 2}
# printing original dictionary
print("The original dictionary : " + str(test_dict))
# Using sorted() + items() + defaultdict()
# Grouping dictionary keys by value
res = defaultdict(list)
for key, val in sorted(test_dict.items()):
res[val].append(key)
# printing result
print("Grouped dictionary is : " + str(dict(res)))
Python3
d_input = {'Input.txt': 'Randy', 'Code.py': 'Stan', 'Output.txt': 'Randy'}
res = {}
for i, v in d_input.items():
res[v] = [i] if v not in res.keys() else res[v] + [i]
print(res)
输出:
The original dictionary : {'gfg': 1, 'is': 2, 'best': 1, 'for': 3, 'CS': 2}
Grouped dictionary is : {2: ['CS', 'is'], 1: ['best', 'gfg'], 3: ['for']}
方法二:
此外,此任务也可以在不使用任何模块的情况下执行。
所以这里的逻辑是:
我们可以检查密钥是否存在
1.不,那我们可以创建key res[v] = [i]
2. 是的,我们可以在键 res[v] + [i] 上附加值
Python3
d_input = {'Input.txt': 'Randy', 'Code.py': 'Stan', 'Output.txt': 'Randy'}
res = {}
for i, v in d_input.items():
res[v] = [i] if v not in res.keys() else res[v] + [i]
print(res)
输出:
{'Randy': ['Input.txt', 'Output.txt'], 'Stan': ['Code.py']}