通过使用python对字典中的所有ID进行分组来生成列表

时间:2017-08-10 06:05:38

标签: python json list dictionary

我有这个json,我想只将follower_ids w.r.t project_id提取到列表中:

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

Json List:

{
    "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}"建议如何生成列表并在其中添加其各自的关注者ID?

修改/更新

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

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

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

3 个答案:

答案 0 :(得分: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 :(得分:1)

您可以使用nest dict comprehension 表达式来创建dict对象:

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

让我们说上面的dict存储在变量result中。然后,您可以访问与每个所谓的项目ID 对应的dict中的元素:

>>> 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"
        }]
    }]
}

答案 2 :(得分: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()。< / p>

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

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

现在您可以将这些变量作为列表进行访问。再一次,这很糟糕,因为它会污染你的全局。