Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:基于传递的元组(所有元组元素)对字典进行分组_Python_Dictionary_Group By_Tuples - Fatal编程技术网

Python:基于传递的元组(所有元组元素)对字典进行分组

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}]和元组(t)的列表传递给一个函数,其中元组的长度可以是任意的(例如,我有一个组函数,它传入字典和元组并返回分组字典):

元组的元素是字典的键之一

如何根据tuple(t)提供的键对字典进行分组

E、 g:如果

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