Форум сайта python.su
0
Получилось самому разобраться:
Кому интерестно
test = [{'inf':1, 'numb':'11'},{'inf':1, 'numb':'99a'},{'inf':2, 'numb':'22'},{'inf':3, 'numb':'33'},{'inf':3, 'numb':'33`2a'},]
cu = {}
for i in test:
if not cu.has_key(i['inf']):
cu[i['inf']] = []
cu[i['inf']].append(i['numb'])
else:
cu[i['inf']].append(i['numb']){1: ['11', '99a'], 2: ['22'], 3: ['33', '33`2a']}Офлайн
36
можно немного по извращаться:
from itertools import groupby
from operator import itemgetter
def foo():
test = [{'inf':1, 'numb':'11'}, {'inf':1, 'numb':'99a'},
{'inf':2, 'numb':'22'}, {'inf':3, 'numb':'33'},
{'inf':3, 'numb':'33`2a'},
]
test.sort(key=itemgetter("inf")) # если заранее известно, что test отсортирован по "inf", то можно не делать
result = dict((k, [x["numb"] for x in g]) \
for k, g in groupby(test, key=itemgetter("inf")))
return result
from collections import defaultdict
def foo():
test = [{'inf':1, 'numb':'11'}, {'inf':1, 'numb':'99a'},
{'inf':2, 'numb':'22'}, {'inf':3, 'numb':'33'},
{'inf':3, 'numb':'33`2a'},
]
result = defaultdict(list)
for i in test:
result[i["inf"]].append(i["numb"])
return result
Офлайн
0
Ого с библиотеками…сильно. Большое спасибо!
Но я забыл маленькую деталь, что нужно получить вид не:
{1: ['11', '99a'], 2: ['22'], 3: ['33', '33`2a']}{1: ('11', '99a'), 2: '22', 3: ('33', '33`2a')}Отредактировано (Апрель 1, 2011 09:47:43)
Офлайн
0
Собственно чтобы добится такого вида пришлось читерить с помощью JavaScripta^
То есть в {streets}- все ключи, {doma}- все значения:
из списка такого вида:
street_number = {1: ['11', '99a'], 2: ['22'], 3: ['33', '33`2a']}
for v,k in street_number.items():
if street_number.has_key(v):
tpl.set_var("streets", v) #Это парсинг в переменную, самописный
sts=""
for z in k:
if sts:
sts += ",'%s'" % z
else:
sts += "'%s'" % z
tpl.set_var("doma", sts)
var streets=new Array();
streets[{streets}] = new Array({doma});streets[1]: ('11', '99a'),
streets[2]:( '22'),
streets[3]: ('33', '33`2a')}Офлайн
18
>>> d = {1: ['11', '99a'], 2: ['22'], 3: ['33', '33`2a']}
>>> for i in d: d[i] = tuple(d[i])
...
>>> d
{1: ('11', '99a'), 2: ('22',), 3: ('33', '33`2a')}
>>>Офлайн