Python:基于传递的元组(所有元组元素)对字典进行分组
假设我已将字典[{d}]和元组(t)的列表传递给一个函数,其中元组的长度可以是任意的(例如,我有一个组函数,它传入字典和元组并返回分组字典): 元组的元素是字典的键之一 如何根据tuple(t)提供的键对字典进行分组 E、 g:如果Python:基于传递的元组(所有元组元素)对字典进行分组,python,dictionary,group-by,tuples,Python,Dictionary,Group By,Tuples,假设我已将字典[{d}]和元组(t)的列表传递给一个函数,其中元组的长度可以是任意的(例如,我有一个组函数,它传入字典和元组并返回分组字典): 元组的元素是字典的键之一 如何根据tuple(t)提供的键对字典进行分组 E、 g:如果 d = [{'name': 'John', 'cat': 'senior', 'pos': 'fwd'}, {'name': 'Adam', 'cat': 'junior', 'pos': 'fwd'}, {'name': 'Bruce', 'cat': 'seni
d = [{'name': 'John', 'cat': 'senior', 'pos': 'fwd'}, {'name': 'Adam', 'cat': 'junior', 'pos': 'fwd'}, {'name': 'Bruce', 'cat': 'senior', 'pos': 'fwd'}]
t = ('cat', 'pos')
然后
您可以使用和字典理解来实现这一点
import itertools
d.sort(key=lambda x: tuple(x[key] for key in t)) # sorting the data with the same key before grouping.
by_group = {
key: [g for g in group]
for key, group in itertools.groupby(d, key=lambda x: tuple(x[key] for key in t))
}
输出:
{
("junior", "fwd"): [{"name": "Adam", "cat": "junior", "pos": "fwd"}],
("senior", "fwd"): [
{"name": "John", "cat": "senior", "pos": "fwd"},
{"name": "Bruce", "cat": "senior", "pos": "fwd"},
],
}
我解决了它:
def group_by_field(d, t):
group_keys = { tuple( s[key] for key in t ) for s in d }
by_group = { key: [] for key in group_keys }
for el in d:
by_group[ tuple( el[key] for key in t) ].append(el)
return by_group
字符串
“def”
来自哪里?你的值前面真的有空格吗?这不是确切的python代码。我只是想说明我有一个字典,需要对元组进行分组。此外,增加了可读性空间。如果需要重新格式化,请告诉我。
{
("junior", "fwd"): [{"name": "Adam", "cat": "junior", "pos": "fwd"}],
("senior", "fwd"): [
{"name": "John", "cat": "senior", "pos": "fwd"},
{"name": "Bruce", "cat": "senior", "pos": "fwd"},
],
}
def group_by_field(d, t):
group_keys = { tuple( s[key] for key in t ) for s in d }
by_group = { key: [] for key in group_keys }
for el in d:
by_group[ tuple( el[key] for key in t) ].append(el)
return by_group