Форум сайта python.su
1
Люди добрые, помогите. Что-то у меня ступор, не могу придумать условие или действие.
Есть переменная Z нужно найти в ней ID в котором есть тип E и нет типа F, в данном примере это ID 110
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'}]
Офлайн
173
type_f_ids = set(x['ID'] for x in z if x['Type'] == 'F') result = [x for x in z if x['ID'] not in type_f_ids]
result = [x for x in z if x['Type'] == 'E' and x['ID'] not in type_f_ids]
Отредактировано reclosedev (Авг. 25, 2012 20:41:10)
Офлайн
1
Спасибо большое за потраченное на мой вопрос время. Но мне как новичку сложно читать сокращённые условия (Условие в строчку).
Если Вас не затруднит, не могли бы вы расписать в пару строчек условие или более.
Офлайн
52
Офлайн
14
Ну и что я писал по поводу forum driven develoment? xD Не грузите нубов сложными вещами.
paraman, это можно переписать в более привычном виде так:
# время поиска в set практически не зависит от количества элементов в нем type_f_ids = set() for x in z: if x['Type'] == 'F': type_f_ids.add(x) result = [] for x in z: if x['ID'] not in type_f_ids: result.append(x)
Офлайн
31
odnochlen
Ну и что я писал по поводу forum driven develoment? xD Не грузите нубов сложными вещами.
paraman, это можно переписать в более привычном виде так:Как ты видишь, вариант со списковыми выражениями гораздо короче.# время поиска в set практически не зависит от количества элементов в нем type_f_ids = set() for x in z: if x['Type'] == 'F': type_f_ids.add(x) result = [] for x in z: if x['ID'] not in type_f_ids: result.append(x)
Traceback (most recent call last):
File "C:\Documents and Settings\san\Рабочий стол\Python File (10).py", line 8, in <module>
type_f_ids.add(x)
TypeError: unhashable type: 'dict'
[code\]
Отредактировано sanodin (Авг. 26, 2012 09:32:50)
Офлайн
857
>>> 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'}] >>> >>> {d['ID'] for d in z if d['Type'] == 'E'} - \ ... {d['ID'] for d in z if d['Type'] == 'F'} {'110'} >>>
Офлайн
14
sanodin, писал прямо в окне ответа. Вот что значит нет легковесной ide с дополнением.
py.user.next, 2.7 или 3.х only.
Отредактировано odnochlen (Авг. 26, 2012 14:58:46)
Офлайн
20
odnochlenbpython
sanodin, писал прямо в окне ответа. Вот что значит нет легковесной ide с дополнением.
Отредактировано EBFE (Авг. 26, 2012 16:42:30)
Прикреплённый файлы:
bpython.png (25,4 KБ)
Офлайн
173
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]
EBFEИнтересная вещь, оказывается.
bpython.png
Отредактировано reclosedev (Авг. 26, 2012 17:24:38)
Офлайн