* On 11/04/2013 14:11, Franz Kelnreiter wrote: > On Thu, Apr 11, 2013 at 1:46 PM, Thomas Goebel wrote: >> >> the difference between your and my code is that >> >> global_list = {'_'.join(['list', str(i)]):[] for i in range(20)} >> >> creates a dict 'global_list' which has 20 keys named from 'list_0' to >> 'list_19'. The value for all keys is an empty list. If you want to >> create i.e. 20 keys which value is a list with 20 ints you have to use >> >> global_list = ({'_'.join(['list', str(i)]):[a for a in range(20)] for >> i in range(20)}) > > Thanks for your explanation, I think I know what you want to do and I would > very much like to understand your code in detail - maybe I am too stupid - > but when I execute the value part of your code construct:
This code > [a for a in range(20)] for i in range(20) won't run because you you didn't define 'i'! [a for a in range(3)] will return a list [0, 1, 2] To get a dict with n keys we can use a for-loop, too: d = {} for n in range(3): # Create keys 'list_0' to 'list_n' d['list_' + str(n)] = [] So we finally get: d.keys() ['list_2', 'list_1', 'list_0'] d.values() [[], [], []] Now we create a dict with n keys and for every key n we set the value to a list of m ints: e = {} for n in range(3): # Create keys 'list_0' to 'list_n' e['list_' + str(n)] = [] for m in range(3): # Create a list [0, 1, 2] for every key of e e['list_' + str(n)].append(m) The results is as follows: e.keys() ['list_2', 'list_1', 'list_0'] e.values() [[0, 1, 2], [0, 1, 2], [0, 1, 2]] Which is the same as: f = {'list_' + str(n):[m for m in range(3)] for n in range(3)} I double checked the code and everything is working fine for me. Maybe you forgot some braces? P.S: I'm running on python 2.7.4: '2.7.4 (default, Apr 6 2013, 19:54:46) [MSC v.1500 32 bit (Intel)]' -- http://mail.python.org/mailman/listinfo/python-list