Форум сайта python.su
1
reclosedevparamanБез проблем
Если Вас не затруднит, не могли бы вы расписать в пару строчек условие или более.А если серьезно, выше уже написали без comprehension и дали ссылки на объяснение, а если нужен только один ID, то решение py.user.next будет лучше.type_f_ids = set(x['ID'] for x in z if x['Type'] == 'F') result = [x for x in z if x['Type'] == 'E' and x['ID'] not in type_f_ids]EBFEИнтересная вещь, оказывается.
bpython.png
Офлайн
857
reclosedevоно годится и для нескольких ID
А если серьезно, выше уже написали без comprehension и дали ссылки на объяснение, а если нужен только один ID, то решение py.user.next будет лучше.
>>> z = [{'ID': '100', 'Type': 'E'}, {'ID': '100', 'Type': 'E'}, {'ID': '100', 'Type': 'F'}, {'ID': '101', 'Type': 'E'}, {'ID': '101', 'Type': 'F'}, {'ID': '103', 'Type': 'F'}, {'ID': '103', 'Type': 'E'}, {'ID': '103', 'Type': 'E'}, {'ID': '110', 'Type': 'E'}, {'ID': '110', 'Type': 'E'}, {'ID': '200', 'Type': 'E'}, {'ID': '200', 'Type': 'E'}, {'ID': '200', 'Type': 'F'}, {'ID': '201', 'Type': 'E'}] >>> >>> {d['ID'] for d in z if d['Type'] == 'E'} - \ ... {d['ID'] for d in z if d['Type'] == 'F'} {'201', '110'} >>>
Офлайн
14
py.user.nextЯ думаю, он имел в виду только поле ID
только один ID
Офлайн
857
odnochlenа, ну да, скорее всего
Я думаю, он имел в виду только поле ID
>>> z = [{'ID': '100', 'Type': 'E'}, {'ID': '100', 'Type': 'E'}, {'ID': '100', 'Type': 'F'}, {'ID': '101', 'Type': 'E'}, {'ID': '101', 'Type': 'F'}, {'ID': '103', 'Type': 'F'}, {'ID': '103', 'Type': 'E'}, {'ID': '103', 'Type': 'E'}, {'ID': '110', 'Type': 'E'}, {'ID': '110', 'Type': 'E'}, {'ID': '200', 'Type': 'E'}, {'ID': '200', 'Type': 'E'}, {'ID': '200', 'Type': 'F'}, {'ID': '201', 'Type': 'E'}] >>> >>> [d for d in z if d['ID'] in ... {d['ID'] for d in z if d['Type'] == 'E'} - ... {d['ID'] for d in z if d['Type'] == 'F'}] [{'Type': 'E', 'ID': '110'}, {'Type': 'E', 'ID': '110'}, {'Type': 'E', 'ID': '201'}] >>>
Отредактировано py.user.next (Авг. 27, 2012 07:40:24)
Офлайн
1
Уважаемый py.user.next, а не могли бы вы мне рассписать данное условие в несколько строк, а то я новичок и я, конечно, разберусь с условием в строчку, но Вы, как профессионал, могли бы мне в этом помочь 
Офлайн
568
Попробуйте вот этот код, тут все более-менее просто
z = [{'ID': '100', 'Type': 'E'}, {'ID': '100', 'Type': 'E'}, {'ID': '100', 'Type': 'F'}, {'ID': '101', 'Type': 'E'}, {'ID': '101', 'Type': 'F'}, {'ID': '103', 'Type': 'F'}, {'ID': '103', 'Type': 'E'}, {'ID': '103', 'Type': 'E'}, {'ID': '110', 'Type': 'E'}, {'ID': '110', 'Type': 'E'}, {'ID': '200', 'Type': 'E'}, {'ID': '200', 'Type': 'E'}, {'ID': '200', 'Type': 'F'}, {'ID': '201', 'Type': 'E'}] tmp={} [tmp.setdefault(x['Type'],[]).append(x['ID']) for x in z] res=[x for x in tmp['E'] if not x in tmp['F']] print res
Офлайн
1
FishHook
Попробуйте вот этот код, тут все более-менее простоz = [{'ID': '100', 'Type': 'E'}, {'ID': '100', 'Type': 'E'}, {'ID': '100', 'Type': 'F'}, {'ID': '101', 'Type': 'E'}, {'ID': '101', 'Type': 'F'}, {'ID': '103', 'Type': 'F'}, {'ID': '103', 'Type': 'E'}, {'ID': '103', 'Type': 'E'}, {'ID': '110', 'Type': 'E'}, {'ID': '110', 'Type': 'E'}, {'ID': '200', 'Type': 'E'}, {'ID': '200', 'Type': 'E'}, {'ID': '200', 'Type': 'F'}, {'ID': '201', 'Type': 'E'}] tmp={} [tmp.setdefault(x['Type'],[]).append(x['ID']) for x in z] res=[x for x in tmp['E'] if not x in tmp['F']] print res
res = set(res) print list(res)
Офлайн