简体   繁体   中英

understanding nested python dict comprehension

I am getting along with dict comprehensions and trying to understand how the below 2 dict comprehensions work:

select_vals = ['name', 'pay']
test_dict = {'data': [{'name': 'John', 'city': 'NYC', 'pay': 70000}, {'name': 'Mike', 'city': 'NYC', 'pay': 80000}, {'name': 'Kate', 'city': 'Houston', 'pay': 65000}]}
dict_comp1 = [{key: item[key] for key in select_vals } for item in test_dict['data']  if item['pay'] > 65000 ]

The above line gets me [{'name': 'John', 'pay': 70000}, {'name': 'Mike', 'pay': 80000}]

dict_comp2 = [{key: item[key]} for key in select_vals  for item in test_dict['data']  if item['pay'] > 65000 ]

The above line gets me [{'name': 'John'}, {'name': 'Mike'}, {'pay': 70000}, {'pay': 80000}]

How does the two o/ps vary when written in a for loop? When I execute in a for loop

dict_comp3 = []
for key in select_vals:
    for item in test_dict['data']:
        if item['pay'] > 65000:
            dict_comp3.append({key: item[key]})

print(dict_comp3)

The above line gets me same as dict_comp2 [{'name': 'John'}, {'name': 'Mike'}, {'pay': 70000}, {'pay': 80000}]

How do I get the o/p as dict_comp1 in a for loop?

The select vals iteration should be the inner one

result = []
for item in test_dict['data']:
    if item['pay'] > 65000:
        aux = {}
        for key in select_vals:
            aux[key] = item[key]
        result.append(aux)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM