我有以下代码:
[
{
"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",
},
},
]
我想要:
[
"2008" : [
{
"info": {
"a": 65535,
"b": 50,
},
"test": {
"m": "10300",
"id": "2008",
},
},
{
"info": {
"a": 65535,
"b": 50,
},
"test": {
"m": "10300",
"id": "2008",
},
},
]
"2009" : [
{
"info": {
"a": 65535,
"b": 50,
},
"test": {
"m": "10300",
"id": "2009",
},
},
]
此想法是根据列ID按键值分组。我是python的新手,不知道该怎么做。请帮我。提前谢谢。如果您能提供一些想法,那就太好了。我找到了一些示例,但无论如何还是不能解决这个问题。
我的解决方案:
value = [i for i in array]
res = sorted(value, key=lambda x: x["id"], reverse=True)
答案 0 :(得分:2)
我认为您想要一个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}
答案 1 :(得分:1)
使用Observable.forkJoin(this.cdsDataService.getServersForComponent(), this.cdsDataService.getComponentForServer())
.switchMap(([servers, components]) => {
let observableBatch = components.map(comp => this.cdsDataService.getComponentLinks(comp.ID)
.map(p => {
this.componentLinkData = p.map(it => ({from: comp.ID, to: it.ID, color: "blue"}))
}));
return Observable.forkJoin(observableBatch)
})
.subscribe(()=>{
SomeMethod();
})
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)
答案 2 :(得分:1)
让我们假设
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',因此将引发错误。
此外,列表不能包含键值对。您必须为此使用字典。