Форум сайта python.su
0
Я создал функцию
def UniqueVariables( self, locations ):
tmp_locs = []
for loc in locations:
flag = False
if len( tmp_locs ) > 0:
for k in tmp_locs:
if loc[ "NAME" ] == k[ "NAME" ]:
flag = True
if flag == False:
tmp_locs.append( loc )
return tmp_locs
locations = UniqueVariables( locations )
Офлайн
7
def UniqueVariables( self, locations ):
return list({k['NAME']:k for k in reversed(locations)}.values())
Офлайн
0
Isemreturn list( { k : k for k in locations }.values() )def UniqueVariables( self, locations ):
return list({k['NAME']:k for k in reversed(locations)}.values())
Офлайн
25
А мне кажется, что тут стоит воспользоваться свойством, которое часто ставит в тупик )
def UniqueVariables( self, locations ):
def flttr(a, n=set()):
if a['NAME'] not in n:
n.add(a['NAME'])
return True
return False
return filter(flttr, locations)
Отредактировано (Дек. 22, 2011 19:16:14)
Офлайн
7
Goliath
return list( { k : k for k in locations }.values() )
^
SyntaxError: invalid syntax
>>> list( { k[ 'NAME' ] : k for k in locations }.values() )
[{'NAME': '__Q1', 'SIZE': 'Y'}, {'NAME': '__Q3', 'SIZE': 'I'}, {'NAME': '__Q2', 'SIZE': 'X'}]
>>>>>> list( { k[ 'NAME' ] : k for k in reversed(locations) }.values() )
[{'NAME': '__Q1', 'SIZE': 'X'}, {'NAME': '__Q3', 'SIZE': 'X'}, {'NAME': '__Q2', 'SIZE': 'X'}]
>>>Отредактировано (Дек. 22, 2011 19:46:56)
Офлайн
253
return list( { k : k for k in locations }.values() )
^
SyntaxError: invalid syntax
это для 2x не будет работать
В этом случае например так:
from itertools import groupby
def UniqueVariables( self, a):
f=lambda x:x['NAME']
return [i[1].next() for i in groupby(sorted(a,key=f),f)]
Офлайн
7
doza_andА как же тогда во 2-м питоне создавать словари? Только через __setitem__ ?
return list( { k : k for k in locations }.values() )
^
SyntaxError: invalid syntax
это для 2x не будет работать
def UniqueVariables( locations ):
s = { k[ 'NAME' ] for k in locations }
return [k for k in locations if k['NAME'] in s and not s.remove(k['NAME'])]
s = set( [ k[ 'NAME' ] for k in locations ] )
Отредактировано (Дек. 23, 2011 00:34:28)
Офлайн
857
>>> def filt(k, *dicts):
... uni = []
... s = set()
... for d in dicts:
... v = d[k]
... if v not in s:
... s.add(v)
... uni.append(d)
... return uni
...
>>> dlst = [{ 'NAME': '__Q1', 'SIZE': 'X'},
... { 'NAME': '__Q3', 'SIZE': 'X'},
... { 'NAME': '__Q2', 'SIZE': 'X'},
... { 'NAME': '__Q1', 'SIZE': 'Y'},
... { 'NAME': '__Q3', 'SIZE': 'I'}]
>>>
>>> filt('NAME', *dlst)
[{'NAME': '__Q1', 'SIZE': 'X'}, {'NAME': '__Q3', 'SIZE': 'X'}, {'NAME': '__Q2', 'SIZE': 'X'}]
>>> filt('SIZE', *dlst)
[{'NAME': '__Q1', 'SIZE': 'X'}, {'NAME': '__Q1', 'SIZE': 'Y'}, {'NAME': '__Q3', 'SIZE': 'I'}]
>>>
Офлайн
857
Isem
А как же тогда во 2-м питоне создавать словари?
[guest@localhost ~]$ python2.7
Python 2.7 (r27:82500, Sep 16 2010, 18:03:06)
[GCC 4.5.1 20100907 (Red Hat 4.5.1-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> {i: None for i in range(10)}
{0: None, 1: None, 2: None, 3: None, 4: None, 5: None, 6: None, 7: None, 8: None, 9: None}
>>>
[guest@localhost ~]$ python2.6
Python 2.6 (r26:66714, Nov 14 2011, 09:59:04)
[GCC 4.5.1 20100924 (Red Hat 4.5.1-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> {i: None for i in range(10)}
File "<stdin>", line 1
{i: None for i in range(10)}
^
SyntaxError: invalid syntax
>>> {i for i in range(10)}
File "<stdin>", line 1
{i for i in range(10)}
^
SyntaxError: invalid syntax
>>>
>>> dict((k, None) for k in range(10))
{0: None, 1: None, 2: None, 3: None, 4: None, 5: None, 6: None, 7: None, 8: None, 9: None}
>>>
Отредактировано (Дек. 23, 2011 00:44:29)
Офлайн
7
py.user.nextНе завидую любителям посидеть за 2.6
Python 2.6 (r26:66714, Nov 14 2011, 09:59:04)
on linux2
Type “help”, “copyright”, “credits” or “license” for more information.
>>> {i: None for i in range(10)}
File “<stdin>”, line 1
{i: None for i in range(10)}
^
SyntaxError: invalid syntax
Офлайн