Форум сайта python.su
857
То есть просто из ID взять каждую строку. И для каждой строки найти словарь в data с этой строкой и наименьшим значением Position. А draw вообще в поиске не участвует.
Получится список словарей, в которых значения ID соответствуют строкам из списка ID, а значение Position у каждого словаря минимально среди других словарей из data с аналогичной строкой ID.
>>> slst = ['c_gsh_t.Srte6f:tesrs.o/sg', 'g3.erSi3th:12l9PgPr/iit/m', '//aRue-fatriR_teot-9tn_s-', '3/em-r0fninrre-I/rhefrfDe'] >>> >>> dlst = [{'Position': '8', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '1'}, {'Position': '1', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '6'}, {'Position': '2', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '2'}, {'Position': '3', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '4'}, {'Position': '4', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '7'}, {'Position': '5', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '5'}, {'Position': '6', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '3'}, {'Position': '7', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '8'}, {'Position': '9', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '9'}, {'Position': '4', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '5'}, {'Position': '2', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '2'}, {'Position': '1', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '3'}, {'Position': '5', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '4'}, {'Position': '6', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '1'}, {'Position': '3', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '6'}, {'Position': '3', 'ID': '3/em-r0fninrre-I/rhefrfDe', 'Draw': '3'}, {'Position': '1', 'ID': '3/em-r0fninrre-I/rhefrfDe', 'Draw': '1'}, {'Position': '2', 'ID': '3/em-r0fninrre-I/rhefrfDe', 'Draw': '2'}, {'Position': '4', 'ID': '3/em-r0fninrre-I/rhefrfDe', 'Draw': '4'}, {'Position': '3', 'ID': 'g3.erSi3th:12l9PgPr/iit/m', 'Draw': '5'}, {'Position': '1', 'ID': 'g3.erSi3th:12l9PgPr/iit/m', 'Draw': '3'}, {'Position': '2', 'ID': 'g3.erSi3th:12l9PgPr/iit/m', 'Draw': '1'}, {'Position': '6', 'ID': 'g3.erSi3th:12l9PgPr/iit/m', 'Draw': '2'}, {'Position': '5', 'ID': 'g3.erSi3th:12l9PgPr/iit/m', 'Draw': '4'}, {'Position': '4', 'ID': 'g3.erSi3th:12l9PgPr/iit/m', 'Draw': '6'}] >>> >>> out = [min((d for d in dlst if d['ID'] == s), ... key=lambda i: int(i['Position'])) ... for s in slst] >>> out [{'Draw': '3', 'Position': '1', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg'}, {'Draw': '3', 'Position': '1', 'ID': 'g3.erSi3th:12l9PgPr/iit/m'}, {'Draw': '6', 'Position': '1', 'ID': '//aRue-fatriR_teot-9tn_s-'}, {'Draw': '1', 'Position': '1', 'ID': '3/em-r0fninrre-I/rhefrfDe'}] >>>
Отредактировано py.user.next (Авг. 12, 2014 07:26:52)
Офлайн
1
Вы адский кодер 
В новый словарь ключик ID можно не включать, а вместо него включить количество ID в данной дате.
У меня в быдлокоде это делалось так len(data_ID)
Отредактировано paraman (Авг. 12, 2014 09:46:10)
Офлайн
1
py.user.next
То есть просто из ID взять каждую строку. И для каждой строки найти словарь в data с этой строкой и наименьшим значением Position. А draw вообще в поиске не участвует.Получится список словарей, в которых значения ID соответствуют строкам из списка ID, а значение Position у каждого словаря минимально среди других словарей из data с аналогичной строкой ID.
dlst = [{'Position': '8', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '10'}
Отредактировано paraman (Авг. 12, 2014 22:26:36)
Офлайн
857
Сначала продумай всё на словах, а потом пиши код. Чтобы десять разных кодов не писать, которые все делают не то.
Офлайн
1
py.user.nextТяжело быть новичком.
Сначала продумай всё на словах, а потом пиши код. Чтобы десять разных кодов не писать, которые все делают не то.
Не заполненного draw быть не может. При заполнение стоит проверка, но ему может быть присвоен ошибочный номер.
Для проверки этого я и добавил функцию checkDraw.
Офлайн
1
py.user.next
Сначала продумай всё на словах, а потом пиши код. Чтобы десять разных кодов не писать, которые все делают не то.
[{'Position': '8', 'Draw': '10', 'ID': '//aRue-fatriR_teot-9tn_s-'}, {'Position': '1', 'Draw': '6', 'ID': '//aRue-fatriR_teot-9tn_s-'}, {'Position': '2', 'Draw': '2', 'ID': '//aRue-fatriR_teot-9tn_s-'}, {'Position': '3', 'Draw': '4', 'ID': '//aRue-fatriR_teot-9tn_s-'}, {'Position': '4', 'Draw': '7', 'ID': '//aRue-fatriR_teot-9tn_s-'}, {'Position': '5', 'Draw': '5', 'ID': '//aRue-fatriR_teot-9tn_s-'}, {'Position': '6', 'Draw': '3', 'ID': '//aRue-fatriR_teot-9tn_s-'}, {'Position': '7', 'Draw': '8', 'ID': '//aRue-fatriR_teot-9tn_s-'}, {'Position': '9', 'Draw': '9', 'ID': '//aRue-fatriR_teot-9tn_s-'}]
[{'Position': '3', 'Draw': '5', 'ID': 'g3.erSi3th:12l9PgPr/iit/m'}, {'Position': '1', 'Draw': '3', 'ID': 'g3.erSi3th:12l9PgPr/iit/m'}, {'Position': '2', 'Draw': '1', 'ID': 'g3.erSi3th:12l9PgPr/iit/m'}, {'Position': '6', 'Draw': '2', 'ID': 'g3.erSi3th:12l9PgPr/iit/m'}, {'Position': '5', 'Draw': '4', 'ID': 'g3.erSi3th:12l9PgPr/iit/m'}, {'Position': '4', 'Draw': '6', 'ID': 'g3.erSi3th:12l9PgPr/iit/m'}]
Офлайн
857
>>> slst = ['c_gsh_t.Srte6f:tesrs.o/sg', 'g3.erSi3th:12l9PgPr/iit/m', '//aRue-fatriR_teot-9tn_s-', '3/em-r0fninrre-I/rhefrfDe'] >>> >>> dlst = [{'Position': '8', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '1'}, {'Position': '1', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '6'}, {'Position': '2', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '2'}, {'Position': '3', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '4'}, {'Position': '4', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '7'}, {'Position': '5', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '5'}, {'Position': '6', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '3'}, {'Position': '7', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '8'}, {'Position': '9', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '9'}, {'Position': '4', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '5'}, {'Position': '2', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '2'}, {'Position': '1', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '3'}, {'Position': '5', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '4'}, {'Position': '6', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '1'}, {'Position': '3', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '6'}, {'Position': '3', 'ID': '3/em-r0fninrre-I/rhefrfDe', 'Draw': '3'}, {'Position': '1', 'ID': '3/em-r0fninrre-I/rhefrfDe', 'Draw': '1'}, {'Position': '2', 'ID': '3/em-r0fninrre-I/rhefrfDe', 'Draw': '2'}, {'Position': '4', 'ID': '3/em-r0fninrre-I/rhefrfDe', 'Draw': '4'}, {'Position': '3', 'ID': 'g3.erSi3th:12l9PgPr/iit/m', 'Draw': '5'}, {'Position': '1', 'ID': 'g3.erSi3th:12l9PgPr/iit/m', 'Draw': '3'}, {'Position': '2', 'ID': 'g3.erSi3th:12l9PgPr/iit/m', 'Draw': '1'}, {'Position': '6', 'ID': 'g3.erSi3th:12l9PgPr/iit/m', 'Draw': '2'}, {'Position': '5', 'ID': 'g3.erSi3th:12l9PgPr/iit/m', 'Draw': '4'}, {'Position': '4', 'ID': 'g3.erSi3th:12l9PgPr/iit/m', 'Draw': '6'}] >>> >>> out = {} >>> for s in slst: ... t = tuple(i for i in dlst if i['ID'] == s) ... lt = len(t) ... td = (i for i in t if int(i['Draw']) <= lt) ... m = min(td, key=lambda i: int(i['Position'])) ... out[s] = m, lt ... >>> out {'c_gsh_t.Srte6f:tesrs.o/sg': ({'Position': '1', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '3'}, 6), '3/em-r0fninrre-I/rhefrfDe': ({'Position': '1', 'ID': '3/em-r0fninrre-I/rhefrfDe', 'Draw': '1'}, 4), 'g3.erSi3th:12l9PgPr/iit/m': ({'Position': '1', 'ID': 'g3.erSi3th:12l9PgPr/iit/m', 'Draw': '3'}, 6), '//aRue-fatriR_teot-9tn_s-': ({'Position': '1', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '6'}, 9)} >>>
Отредактировано py.user.next (Авг. 13, 2014 01:50:31)
Офлайн
1
py.user.nextСпасибо, что Вы единственный помогаете, но..
slst = ['c_gsh_t.Srte6f:tesrs.o/sg'] dlst = [{'Position': '4', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '50'}, {'Position': '2', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '2'}, {'Position': '1', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '3'}, {'Position': '5', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '4'}, {'Position': '6', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '1'}, {'Position': '3', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '6'}] out = {} for s in slst: t = tuple(i for i in dlst if i['ID'] == s) lt = len(t) td = (i for i in t if int(i['Draw']) <= lt) m = min(td, key=lambda i: int(i['Position'])) out[s] = m, lt print out
Отредактировано paraman (Авг. 13, 2014 16:50:47)
Офлайн
1
slst = ['c_gsh_t.Srte6f:tesrs.o/sg', 'g3.erSi3th:12l9PgPr/iit/m', '//aRue-fatriR_teot-9tn_s-', '3/em-r0fninrre-I/rhefrfDe'] dlst = [{'Position': '8', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '100'}, {'Position': '1', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '6'}, {'Position': '2', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '2'}, {'Position': '3', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '4'}, {'Position': '4', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '7'}, {'Position': '5', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '5'}, {'Position': '6', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '3'}, {'Position': '7', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '8'}, {'Position': '9', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '9'}, {'Position': '4', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '5'}, {'Position': '2', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '2'}, {'Position': '1', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '3'}, {'Position': '5', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '4'}, {'Position': '6', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '1'}, {'Position': '3', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '6'}, {'Position': '3', 'ID': '3/em-r0fninrre-I/rhefrfDe', 'Draw': '3'}, {'Position': '1', 'ID': '3/em-r0fninrre-I/rhefrfDe', 'Draw': '1'}, {'Position': '2', 'ID': '3/em-r0fninrre-I/rhefrfDe', 'Draw': '2'}, {'Position': '4', 'ID': '3/em-r0fninrre-I/rhefrfDe', 'Draw': '4'}, {'Position': '3', 'ID': 'g3.erSi3th:12l9PgPr/iit/m', 'Draw': '5'}, {'Position': '1', 'ID': 'g3.erSi3th:12l9PgPr/iit/m', 'Draw': '3'}, {'Position': '2', 'ID': 'g3.erSi3th:12l9PgPr/iit/m', 'Draw': '1'}, {'Position': '6', 'ID': 'g3.erSi3th:12l9PgPr/iit/m', 'Draw': '2'}, {'Position': '5', 'ID': 'g3.erSi3th:12l9PgPr/iit/m', 'Draw': '4'}, {'Position': '4', 'ID': 'g3.erSi3th:12l9PgPr/iit/m', 'Draw': '6'}] out = {} for s in slst: t = tuple(i for i in dlst if i['ID'] == s) lt = len(t) td = list(i for i in t if int(i['Draw']) > lt) if td == []: td = (i for i in t if int(i['Draw']) <= lt) m = min(td, key=lambda i: int(i['Position'])) out[s] = m, lt print len(out)
Отредактировано paraman (Авг. 13, 2014 21:49:25)
Офлайн
857
paraman
Это ошибка.
Ваш код, не отработал эту ошибку и выдал в результат.
>>> slst = ['c_gsh_t.Srte6f:tesrs.o/sg', 'g3.erSi3th:12l9PgPr/iit/m', '//aRue-fatriR_teot-9tn_s-', '3/em-r0fninrre-I/rhefrfDe'] >>> >>> dlst = [{'Position': '8', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '1'}, {'Position': '1', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '6'}, {'Position': '2', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '2'}, {'Position': '3', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '4'}, {'Position': '4', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '7'}, {'Position': '5', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '5'}, {'Position': '6', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '3'}, {'Position': '7', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '8'}, {'Position': '9', 'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '9'}, {'Position': '4', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '5'}, {'Position': '2', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '2'}, {'Position': '1', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '3'}, {'Position': '5', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '4'}, {'Position': '6', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '1'}, {'Position': '3', 'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '6'}, {'Position': '3', 'ID': '3/em-r0fninrre-I/rhefrfDe', 'Draw': '3'}, {'Position': '1', 'ID': '3/em-r0fninrre-I/rhefrfDe', 'Draw': '1'}, {'Position': '2', 'ID': '3/em-r0fninrre-I/rhefrfDe', 'Draw': '2'}, {'Position': '4', 'ID': '3/em-r0fninrre-I/rhefrfDe', 'Draw': '4'}, {'Position': '3', 'ID': 'g3.erSi3th:12l9PgPr/iit/m', 'Draw': '5'}, {'Position': '1', 'ID': 'g3.erSi3th:12l9PgPr/iit/m', 'Draw': '3'}, {'Position': '2', 'ID': 'g3.erSi3th:12l9PgPr/iit/m', 'Draw': '1'}, {'Position': '6', 'ID': 'g3.erSi3th:12l9PgPr/iit/m', 'Draw': '2'}, {'Position': '5', 'ID': 'g3.erSi3th:12l9PgPr/iit/m', 'Draw': '4'}, {'Position': '4', 'ID': 'g3.erSi3th:12l9PgPr/iit/m', 'Draw': '6'}] >>> >>> out = {} >>> for s in slst: ... t = tuple(i for i in dlst if i['ID'] == s) ... lt = len(t) ... mdr = max(int(i['Draw']) for i in t) ... if mdr <= lt: ... md = min(t, key=lambda i: int(i['Position'])) ... out[s] = md, lt ... >>> out {'3/em-r0fninrre-I/rhefrfDe': ({'ID': '3/em-r0fninrre-I/rhefrfDe', 'Draw': '1', 'Position': '1'}, 4), '//aRue-fatriR_teot-9tn_s-': ({'ID': '//aRue-fatriR_teot-9tn_s-', 'Draw': '6', 'Position': '1'}, 9), 'c_gsh_t.Srte6f:tesrs.o/sg': ({'ID': 'c_gsh_t.Srte6f:tesrs.o/sg', 'Draw': '3', 'Position': '1'}, 6), 'g3.erSi3th:12l9PgPr/iit/m': ({'ID': 'g3.erSi3th:12l9PgPr/iit/m', 'Draw': '3', 'Position': '1'}, 6)} >>>
paramanНе, там повторный набор. Он для того и был, чтобы исключить словари, неподходящие по Draw.
Вот так вышло, то что нужно.
Офлайн