3 回答
TA贡献1836条经验 获得超3个赞
我认为您想要一个dictionary每个键都为id且值是您的对象的地方。
尝试以下方法。data是您的数据数组。
new = {}
for item in data:
item_id = item['test']['id']
new[item_id] = item
您还可以使用字典理解。
new = {item['test']['id']: item for item in data}
TA贡献1777条经验 获得超3个赞
用 itertools.groupby
from itertools import groupby
f = lambda d: d['test']['id']
res = {k:list(v) for k,v in groupby(sorted(l, key=f), f)}
pprint(res)
输出
{'2008': [{'info': {'a': 65535, 'b': 50},
'test': {'id': '2008', 'm': '10300'}},
{'info': {'a': 65535, 'b': 50},
'test': {'id': '2008', 'm': '10300'}}],
'2009': [{'info': {'a': 65535, 'b': 50},
'test': {'id': '2009', 'm': '10300'}}]}
TA贡献1811条经验 获得超4个赞
让我们假设
array = [
{
"info": {
"a": 65535,
"b": 50,
},
"test": {
"m": "10300",
"id": "2008",
},
},
{
"info": {
"a": 65535,
"b": 50,
},
"test": {
"m": "10300",
"id": "2008",
},
},
{
"info": {
"a": 65535,
"b": 50,
},
"test": {
"m": "10300",
"id": "2009",
},
},
]
然后您可以通过使用获得预期的结果
modified_data = {}
for entry in array:
index = entry['test']['id']
try:
modified_data[index].append(entry)
except KeyError:
modified_data[index] = [entry]
print modified_data
现在让我们分析您的代码
value = [i for i in array]
此后的值将等于数组本身,假设您的数组初始化与我的相同。
res = sorted(value, key=lambda x: x["id"], reverse=True)
如果上面的语句正确,则value将没有“ id”,因此将引发错误。
此外,列表不能具有键值对。您必须为此使用字典。
添加回答
举报