在 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'}]}
我有以下数组:
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']
我猜你可以试试:
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'}]}