Найти - Пользователи
Полная версия: Помогите с условием
Начало » Python для новичков » Помогите с условием
1 2
paraman
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 (нужен просто результат), но в строку мне не очень понятно.
py.user.next
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'}
>>>
odnochlen
py.user.next
только один ID
Я думаю, он имел в виду только поле ID
py.user.next
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 точно задал результат
paraman
Уважаемый py.user.next, а не могли бы вы мне рассписать данное условие в несколько строк, а то я новичок и я, конечно, разберусь с условием в строчку, но Вы, как профессионал, могли бы мне в этом помочь
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
paraman
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
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB