在 python 2.7 中对字典数组进行分组

Group an array of dictionaries in python 2.7

我有以下数组:

array = [
    {'id': 1, 'value1': 'value', 'value2': 'another value'},
    {'id': 1, 'value1': 'value', 'value2': 'another value'},
    {'id': 2, 'value1': 'value', 'value2': 'another value'},
    {'id': 2, 'value1': 'value', 'value2': 'another value'},
]

我想获取以下词典:

expected = {
  '1': [{'value1': 'value', 'value2': 'another value'}, {'value1': 'value', 'value2': 'another value'}],
  '2': [{'value1': 'value', 'value2': 'another value'}, {'value1': 'value', 'value2': 'another value'}]
}

是否有 pythonic 方法来做到这一点?

那么将会发生的是你将像这样遍历数组:

array = []
expected = {}
for i in array:

之后,您将获取字典的每个 ID,如果该 ID 不在预期数组的键中,则创建它。

    if i['id'] not in list(expected.keys()):
        expected[i['id']] = [i]
    else:
        expected[i['id']] += i

所以这很可能在 Python 3 中有效,但在 Python 2 中不太确定。 但希望对您有所帮助!

编辑:我认为您可以通过 del i['id']

从字典中删除 ID

我猜你可以试试:

array = [
    {'id': 1, 'value1': 'value', 'value2': 'another value'},
    {'id': 1, 'value1': 'value', 'value2': 'another value'},
    {'id': 2, 'value1': 'value', 'value2': 'another value'},
    {'id': 2, 'value1': 'value', 'value2': 'another value'},
]
expected = {}
for value in array:
    dict_id = value["id"]
    temp_dict = dict(value)
    del temp_dict["id"]
    if str(dict_id) in expected:
        expected[str(dict_id)].append(temp_dict)
    else:
        expected[str(dict_id)] = [temp_dict]
print(expected)

输出:

{'1': [{'value1': 'value', 'value2': 'another value'}, {'value1': 'value', 'value2': 'another value'}], '2': [{'value1': 'value', 'value2': 'another value'}, {'value1': 'value', 'value2': 'another value'}]}