Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 26, 2012 19:50:59

paraman
Зарегистрирован: 2012-07-10
Сообщения: 170
Репутация: +  1  -
Профиль   Отправить e-mail  

Помогите с условием

reclosedev
paraman
Если Вас не затруднит, не могли бы вы расписать в пару строчек условие или более.
Без проблем
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]
А если серьезно, выше уже написали без comprehension и дали ссылки на объяснение, а если нужен только один ID, то решение py.user.next будет лучше.

EBFE
bpython.png
Интересная вещь, оказывается.

Да, так более понятно, но мне подходит метод py.user.next (нужен просто результат), но в строку мне не очень понятно.

Офлайн

#2 Авг. 27, 2012 01:58:58

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Помогите с условием

reclosedev
А если серьезно, выше уже написали без comprehension и дали ссылки на объяснение, а если нужен только один ID, то решение py.user.next будет лучше.
оно годится и для нескольких 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['ID'] for d in z if d['Type'] == 'E'} - \
... {d['ID'] for d in z if d['Type'] == 'F'}
{'201', '110'}
>>>



Офлайн

#3 Авг. 27, 2012 02:40:48

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Помогите с условием

py.user.next
только один ID
Я думаю, он имел в виду только поле ID

Офлайн

#4 Авг. 27, 2012 07:36:26

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Помогите с условием

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'}]
>>>

paraman точно задал результат



Отредактировано py.user.next (Авг. 27, 2012 07:40:24)

Офлайн

#5 Авг. 27, 2012 08:44:43

paraman
Зарегистрирован: 2012-07-10
Сообщения: 170
Репутация: +  1  -
Профиль   Отправить e-mail  

Помогите с условием

Уважаемый py.user.next, а не могли бы вы мне рассписать данное условие в несколько строк, а то я новичок и я, конечно, разберусь с условием в строчку, но Вы, как профессионал, могли бы мне в этом помочь

Офлайн

#6 Авг. 27, 2012 09:02:02

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Помогите с условием

Попробуйте вот этот код, тут все более-менее просто

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



Офлайн

#7 Авг. 27, 2012 09:10:13

paraman
Зарегистрирован: 2012-07-10
Сообщения: 170
Репутация: +  1  -
Профиль   Отправить e-mail  

Помогите с условием

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)
Что бы получать только ID

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version