Форум сайта python.su
0
Как перегруппировать одномерный массив в многомерный, по определенным параметрам (уникальный device, затем уникальный type, затем уникальный ip, и потом уже информацию file и date)?
то есть из этого:
[ {'device': 'android', 'type': 'xml', 'ip': '198.0.0.1', 'file': 'path_to_file', 'date': '12.02.2015'}, {'device': 'android', 'type': 'xml', 'ip': '198.0.0.2', 'file': 'path_to_file', 'date': '12.02.2015'}, {'device': 'android', 'type': 'zip', 'ip': '198.0.0.3', 'file': 'path_to_file', 'date': '12.02.2015'}, {'device': 'osx', 'type': 'zip', 'ip': '198.0.2.1', 'file': 'path_to_file', 'date': '12.02.2015'}, {'device': 'osx', 'type': 'xml', 'ip': '198.0.2.1', 'file': 'path_to_file', 'date': '12.02.2015'}, {'device': 'osx', 'type': 'xml', 'ip': '198.0.2.1', 'file': 'path_to_file', 'date': '12.02.2015'}, {'device': 'pc', 'type': 'zip', 'ip': '198.0.3.1', 'file': 'path_to_file', 'date': '12.02.2015'}, {'device': 'pc', 'type': 'zip', 'ip': '198.0.3.1', 'file': 'path_to_file', 'date': '12.02.2015'}, {'device': 'pc', 'type': 'xml', 'ip': '198.0.3.1', 'file': 'path_to_file', 'date': '12.02.2015'}, ]
[ { 'device': 'android', 'data': [ { 'type': 'zip', 'data': [ { 'ip': '198.0.0.1', 'data': [ {'file': 'path_to_file1', 'date': '01.02.2015'}, {'file': 'path_to_file2', 'date': '02.02.2015'}, ] }, { 'ip': '198.0.0.2', 'data': [ {'file': 'path_to_file1', 'date': '01.02.2015'}, {'file': 'path_to_file2', 'date': '02.02.2015'}, ] }, { 'ip': '198.0.0.3', 'data': [ {'file': 'path_to_file1', 'date': '01.02.2015'}, {'file': 'path_to_file2', 'date': '02.02.2015'}, ] } ] }, { 'type': 'xml', 'data': [ { 'ip': '198.0.0.1', 'data': [ {'file': 'path_to_file1', 'date': '01.02.2015'}, {'file': 'path_to_file2', 'date': '02.02.2015'}, ] }, { 'ip': '198.0.0.2', 'data': [ {'file': 'path_to_file1', 'date': '01.02.2015'}, {'file': 'path_to_file2', 'date': '02.02.2015'}, ] }, { 'ip': '198.0.0.3', 'data': [ {'file': 'path_to_file1', 'date': '01.02.2015'}, {'file': 'path_to_file2', 'date': '02.02.2015'}, ] } ] } ] }, { 'device': 'osx', 'data': [ { 'type': 'zip', 'data': [ { 'ip': '198.0.0.1', 'data': [ {'file': 'path_to_file1', 'date': '01.02.2015'}, {'file': 'path_to_file2', 'date': '02.02.2015'}, ] }, { 'ip': '198.0.0.2', 'data': [ {'file': 'path_to_file1', 'date': '01.02.2015'}, {'file': 'path_to_file2', 'date': '02.02.2015'}, ] }, { 'ip': '198.0.0.3', 'data': [ {'file': 'path_to_file1', 'date': '01.02.2015'}, {'file': 'path_to_file2', 'date': '02.02.2015'}, ] } ] }, { 'type': 'xml', 'data': [ { 'ip': '198.0.0.1', 'data': [ {'file': 'path_to_file1', 'date': '01.02.2015'}, {'file': 'path_to_file2', 'date': '02.02.2015'}, ] }, { 'ip': '198.0.0.2', 'data': [ {'file': 'path_to_file1', 'date': '01.02.2015'}, {'file': 'path_to_file2', 'date': '02.02.2015'}, ] }, { 'ip': '198.0.0.3', 'data': [ {'file': 'path_to_file1', 'date': '01.02.2015'}, {'file': 'path_to_file2', 'date': '02.02.2015'}, ] } ] } ] } ]
Отредактировано martin (Ноя. 18, 2015 15:17:59)
Офлайн
3
martinНу как, как… Программу писать надо…
Как перегруппировать одномерный массив в многомерный, по определенным параметрам (уникальный device, затем уникальный type, затем уникальный ip, и потом уже информацию file и date)?то есть из этого:
Офлайн
253
IskatelПодумайте в сторону рекурсивно применить groupby…
Ну как, как… Программу писать надо…
from toolz.itertoolz import groupby from toolz.dicttoolz import valmap def gbk(arr,keylist): if keylist: return valmap(lambda x:gbk(x,keylist[1:]),groupby(keylist[0],arr)) else: return arr ############################### a=[ {'device': 'android', 'type': 'xml', 'ip': '198.0.0.1', 'file': 'path_to_file', 'date': '12.02.2015'}, {'device': 'android', 'type': 'xml', 'ip': '198.0.0.2', 'file': 'path_to_file', 'date': '12.02.2015'}, {'device': 'android', 'type': 'zip', 'ip': '198.0.0.3', 'file': 'path_to_file', 'date': '12.02.2015'}, {'device': 'osx', 'type': 'zip', 'ip': '198.0.2.1', 'file': 'path_to_file', 'date': '12.02.2015'}, {'device': 'osx', 'type': 'xml', 'ip': '198.0.2.1', 'file': 'path_to_file', 'date': '12.02.2015'}, {'device': 'osx', 'type': 'xml', 'ip': '198.0.2.1', 'file': 'path_to_file', 'date': '12.02.2015'}, {'device': 'pc', 'type': 'zip', 'ip': '198.0.3.1', 'file': 'path_to_file', 'date': '12.02.2015'}, {'device': 'pc', 'type': 'zip', 'ip': '198.0.3.1', 'file': 'path_to_file', 'date': '12.02.2015'}, {'device': 'pc', 'type': 'xml', 'ip': '198.0.3.1', 'file': 'path_to_file', 'date': '12.02.2015'}, ] >>> gbk(a,['device','type']) {'android': {'xml': [{'date': '12.02.2015', 'device': 'android', 'file': 'path_to_file', 'ip': '198.0.0.1', 'type': 'xml'}, {'date': '12.02.2015', 'device': 'android', 'file': 'path_to_file', 'ip': '198.0.0.2', 'type': 'xml'}], 'zip': [{'date': '12.02.2015', 'device': 'android', 'file': 'path_to_file', 'ip': '198.0.0.3', 'type': 'zip'}]}, 'osx': {'xml': [{'date': '12.02.2015', 'device': 'osx', 'file': 'path_to_file', 'ip': '198.0.2.1', 'type': 'xml'}, {'date': '12.02.2015', 'device': 'osx', 'file': 'path_to_file', 'ip': '198.0.2.1', 'type': 'xml'}], 'zip': [{'date': '12.02.2015', 'device': 'osx', 'file': 'path_to_file', 'ip': '198.0.2.1', 'type': 'zip'}]}, 'pc': {'xml': [{'date': '12.02.2015', 'device': 'pc', 'file': 'path_to_file', 'ip': '198.0.3.1', 'type': 'xml'}], 'zip': [{'date': '12.02.2015', 'device': 'pc', 'file': 'path_to_file', 'ip': '198.0.3.1', 'type': 'zip'}, {'date': '12.02.2015', 'device': 'pc', 'file': 'path_to_file', 'ip': '198.0.3.1', 'type': 'zip'}]}}
Отредактировано doza_and (Ноя. 18, 2015 20:55:11)
Офлайн