Форум сайта python.su
0
Приветствую.
Собственно вот:
In [40]: twogrid = [] In [41]: for x in xrange(2): twogrid.append(dict.fromkeys(['left','right'], [])) In [42]: id(twogrid[0]['left']) Out[42]: 34369616 In [43]: id(twogrid[0]['right']) Out[43]: 34369616
In [44]: twogrid[0]['right'].append('x') In [45]: twogrid[0] Out[45]: {'left': ['x'], 'right': ['x']}
Отредактировано soln (Июль 5, 2012 10:16:17)
Офлайн
41
так в данном случае и создаёт лишь 1 раз, посему и ссылка на список везде одна
In [12]: d = {k: [] for k in ('left', 'right')} In [13]: d Out[13]: {'left': [], 'right': []} In [14]: d['left'].append(1) In [15]: d Out[15]: {'left': [1], 'right': []
Отредактировано slav0nic (Июль 5, 2012 10:44:56)
Офлайн
0
Спасибо за ответ.
Интересная конструкция
slav0nicНадо осознать.d = {k: [] for k in ('left', 'right')}
In [7]: d = {k: [] for k in ('left', 'right')} ------------------------------------------------------------ File "<ipython console>", line 1 d = {k: [] for k in ('left', 'right')} ^ SyntaxError: invalid syntax
Отредактировано soln (Июль 5, 2012 11:27:51)
Офлайн
568
solnЧто-то у Вас явно не то
Только вот у меня это не работает (python 2.7)
Python 2.7.2+ (default, Oct 4 2011, 20:06:09) [GCC 4.6.1] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> d = {k: [] for k in ('left', 'right')} >>> print d {'right': [], 'left': []} >>>
Офлайн
41
soln
PEP274 был реализован в py2.7 и 3к, судя по твоей ошибке у тебя питон таки 2.6 ;)
Офлайн
0
UPD
Ваш предыдущий ответ заметил лишь после как написал ответ
_______________________________-
Я Вас обманул, Извиняюсь.
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) [GCC 4.4.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> print sys.version_info (2, 6, 5, 'final', 0) >>> d = {k: [] for k in ('left', 'right')} File "<stdin>", line 1 d = {k: [] for k in ('left', 'right')} ^ SyntaxError: invalid syntax
FishHooksolnЧто-то у Вас явно не то
Только вот у меня это не работает (python 2.7)
Python 3.1.2 (r312:79147, Dec 9 2011, 20:47:34) [GCC 4.4.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> print(sys.version_info) sys.version_info(major=3, minor=1, micro=2, releaselevel='final', serial=0) >>> d = {k: [] for k in ('left', 'right')} >>> d {'right': [], 'left': []}
Отредактировано soln (Июль 5, 2012 13:54:22)
Офлайн
568
solnА это ни для кого не секрет. Зачем ты вводишь людей в заблуждение?
похоже что 2.6 так не умеет
soln
Только вот у меня это не работает (python 2.7)
Офлайн
0
FishHooksolnА это ни для кого не секрет. Зачем ты вводишь людей в заблуждение?
похоже что 2.6 так не умеет
for x in xrange(26): twogrid.append({'left': [], 'right': []})
Отредактировано soln (Июль 5, 2012 14:43:25)
Офлайн
41
soln
я бы не забивал голову ерундой в поисках изящности (на начальных этапах особенно), нормальная такая “конструкция”
для первого случая можно ещё аля (под 2.6)
>>> dict((k, []) for k in ('right', 'left')) {'right': [], 'left': []} >>>
Отредактировано slav0nic (Июль 5, 2012 15:31:46)
Офлайн
20
vlanmap = [{'left' : [], 'right' : []} for i in xrange(26)]
>>> from collections import namedtuple >>> Tree = namedtuple('Tree','left right') >>> vlanmap = [Tree([],[]) for i in xrange(6)] >>> vlanmap[1].left.append(3) >>> vlanmap [Tree(left=[], right=[]), Tree(left=[3], right=[]), Tree(left=[], right=[]), Tre e(left=[], right=[]), Tree(left=[], right=[]), Tree(left=[], right=[])] >>>
Офлайн