python generator object confusion

Viewed 1718

I have a confusion what's wrong with my code:

users = [{'id': 1, 'name': 'Number1', 'age': 11},
         {'id': 2, 'name': 'Number2', 'age': 12},
         {'id': 3, 'name': 'Number3', 'age': 13},
         {'id': 4, 'name': 'Number4', 'age': 14}]

_keys = ('name', 'age')

data_by_user_id = {u.get('id'): (u.get(k) for k in _keys) for u in users}

data_by_user_id looks like:

{1: <generator object <genexpr> at 0x7f3c12c31050>, 2: <generator object <genexpr> at 0x7f3c12c310a0>, 3: <generator object <genexpr> at 0x7f3c12c310f0>, 4: <generator object <genexpr> at 0x7f3c12c31140>}

but after iteration:

for user_id, data in data_by_user_id.iteritems():
    name, age = data
    print user_id, name, age

result is different than I expected:

1 Number4 14
2 Number4 14
3 Number4 14
4 Number4 14

Can anyone explain me what am I doing here wrong? I know I can use list comprehension instead of generator but I'm trying to figure what's the issue with my code

Thanks!

2 Answers
Related