如果字典可以更改,如何在字典中获取价值

时间:2019-07-28 17:05:55

标签: python

我有一个数据,我想取一些数据。但是我有一个问题,那个字典可以改变并且有更多的领域。该字段是middle_name。如何服用given_name,familly_name,distributor_id,middle_name,name。如果是

我尝试用len的字典来做,但是我有len的字典15。我也尝试着用get('claims')来接受它并大量使用它,但是花了所有值,不是我想要的

InfoAboutUser={'distributor_id': '',
 'family_name': '',
 'given_name': '',

 'middle_name': '' 
 'name': ''}


getID=[{
 'claims': [{'claimType': 'given_name',
             'claimValue': 'string1',
             'id': 19052,
             'userId': 'string 0'},
            {'claimType': 'family_name',
             'claimValue': 'string2',
             'id': 19053,
             'userId': 'string 0'},
            {'claimType': 'distributor_id',
             'claimValue': 'string3',
             'id': 19054,
             'userId': 'string 0'},
            {'claimType': 'middle_name',
             'claimValue': 'string4',
             'id': 19055,
             'userId': 'string 0'},
            {'claimType': 'name',
             'claimValue': 'string5',
             'id': 19056,
             'userId': 'string 0'},
            {'claimType': 'vendor_id',
             'claimValue': 'string6',
             'id': 19057,
             'userId': 'string 0'}],
 '}]


distributor_id = getID['claims'][2]['claimValue']
        InfoAboutUser['distributor_id'] = distributor_id
        #print(distributor_id)

        given_name = getID['claims'][0]['claimValue']

        InfoAboutUser['given_name'] = given_name
        #print(given_name)

        family_name = getID['claims'][1]['claimValue']
        InfoAboutUser['family_name'] = family_name
        #print(family_name)

        name = getID['claims'][3]['claimValue']
        InfoAboutUser['name'] = name
        #print(name)

我希望

的输出
{'distributor_id': 'string3',
 'family_name': 'string2',
 'given_name': 'string1',

 'middle_name': 'string4',
 'name': 'string5'}

{'distributor_id': 'string3',
 'family_name': 'string2',
 'given_name': 'string1',

 'middle_name': '' # If it is not available,
 'name': 'string5'}

位实际输出为

{'distributor_id': 'string3',
 'family_name': 'string2',
 'given_name': 'string1',

 'middle_name': '' 
 'name': 'string4'

2 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,那么解决方案之一可能是遍历所有索赔:

for claim in getID[0].get('claims'):
  if(claim.get('claimType')) == "middle_name":
    print(claim.get('claimValue'))

答案 1 :(得分:0)

处理字典的问题是,在字典周围包裹了一个数组。 要访问日期,您必须将getID的第一项与getID[0]一起使用。之后,您可以如图所示遍历claims条目。

datas = {}
for claim in getID[0]['claims']:
    datas[claim['claimType']] = claim['claimValue']

print(datas)
#{'given_name': 'string1', 'family_name': 'string2', 'distributor_id': 'string3', 'middle_name': 'string4', 'name': 'string5', 'vendor_id': 'string6'}

如果要提取显式,则可以将所需的键定义到列表中,然后将这些条目写入数据字典中。

datas = {}
wanted_keys = ["given_name","familly_name","distributor_id","middle_name","name"]
for claim in getID[0]['claims']:
    if claim['claimType'] in wanted_keys:
        datas[claim['claimType']] = claim['claimValue']
print(datas)
#{'given_name': 'string1', 'distributor_id': 'string3', 'middle_name': 'string4', 'name': 'string5'}