2017-08-10 37 views
0

我有这样的JSON,我想只提取把所有的ID在字典生成列表follower_ids WRT PROJECT_ID到一个列表如下:通过使用python

followers_ids_for_01 = [123,124,...] 
followers_ids_for_02 = [125,126,...] 

的Json列表:

{ 
    "data": [{ 
     "id": 01, 
     "followers": [{ 
      "id": 123, 
      "name": "Shivkumar" 
     }, { 
      "id": 124, 
      "name": "Sneha" 
     }, 
     { 
      ..... 
     }], 
    }, { 
     "id": 02, 
     "followers": [{ 
      "id": 125, 
      "name": "Teja" 
     }, { 
      "id": 126, 
      "name": "Harsha" 
     }, 
     { 
      ...... 
     }], 
    }] 
} 

我试过的:

data =json_list 
projects = data['data'] 

followers_ids =[] 
for project in projects: 
    for i in project['followers']: 
     followers_ids.append(i['id']) 

print followers_ids 

输出:

[123, 124, 125, 126] 

有人建议如何产生“followers_ids_for_{project_id}”列表,并添加其各自的追随者IDS的呢?

编辑/更新:

我需要生成命名变量空白列表

datalists = dict() 
for project in projects: 
    datalists["followers_ids_for_{}".format(project['id'])] = [] 

print datalists 
#{'followers_ids_for_1': [], 'followers_ids_for_2': []} 
+1

您将需要一本字典,否则不能“生成列表”。 –

+0

是的..我已经通过一些其他答案,如https:// stackoverflow。com/a/42768290/6107715我还在寻找一种解决方案,我可以获得命名空白列表 –

+1

您的意思是,您想要有许多单独的变量名称“followers_ids_for_01”,“followers_ids_for_02”等等? –

回答

1

你要做的第一件事是建立在格式你想要一本字典:

In [514]: f = {'followers_ids_for_%s' %d['id'] : [x['id'] for x in d['followers']] for d in data['data'] }; f 
Out[514]: {'followers_ids_for_01': [123, 124], 'followers_ids_for_02': [125, 126]} 

我建议你在此停止。但是,这里是第二个,并且高度不推荐步骤(来自您的hard requirement):更新globals()

In [516]: globals().update(f) 

In [517]: followers_ids_for_01 
Out[517]: [123, 124] 

现在您可以以列表的形式访问这些变量。再次,这是不好的,因为它会污染你的全局变量。

+0

其实我试图了解这个场景的列表的用法和限制。你已经给出了这样一个更好的解释。非常感谢 –

+0

@BHappyBHarsham我很高兴你接受了其他答案,但我认为这是你想要的。 –

1

你可以使用一个列表理解,而不是

[follower['id'] for project in projects for follower in project['followers']] 

如果你只关心一个特定的项目ID

[follower['id'] for project in projects for follower in project['followers'] if project['id] == 'some id'] 
1

您可以使用嵌套字典理解表达式创建dict object`:

>>> {val['id']: [item['id'] for item in val['followers']] for val in data['data']} 
{1: [123, 124], 2: [125, 126]} 

假设上述字典存储在变量result。然后,你可以访问该元素在字典对应于每个所谓的项目编号为:

>>> result[1] # For id '1' 
[123, 124] 

>>> result[2] # For id '2' 
[125, 126] 

PS:在上面的字典理解data变量保存您的JSON对象的值,即:

{ 
    "data": [{ 
     "id": 1, 
     "followers": [{ 
      "id": 123, 
      "name": "Shivkumar" 
     }, { 
      "id": 124, 
      "name": "Sneha" 
     }], 
    }, { 
     "id": 2, 
     "followers": [{ 
      "id": 125, 
      "name": "Teja" 
     }, { 
      "id": 126, 
      "name": "Harsha" 
     }] 
    }] 
} 
+1

感谢这样更好的解释 –