Вы также можете следить за тем, как элемент был замечен. Используйте Dict для этого, и приращения с каждым визированием:
#!/usr/bin/python
dc = {3:['3', '4'], 1:['2', '3'], 2:['3']}
de={}
def do_something(i,k):
print "first time for '%s' with key '%s'" % (i,k)
def do_somethingelse(i,j,k):
print "element '%s' seen %i times. Now with key '%s'" % (i,j,k)
for k in sorted(dc):
for i in dc[k]:
if i not in de:
de[i]=1
do_something(i,k)
else:
de[i]+=1
do_somethingelse(i,de[i],k)
Как уже говорили другие, словари не имеют тот же порядок, обязательно в качестве вставки или коды листинга. Вы можете просто отсортировать ключи (с sorted(dc)
), чтобы различать «первый» и последующий, если это то же самое, что и порядок сортировки. Этот метод легко распространяется на «do_somthing» на основе того, как много раз, когда предмет был замечен.
Выход:
first time for '2' with key '1'
first time for '3' with key '1'
element '3' seen 2 times. Now with key '2'
element '3' seen 3 times. Now with key '3'
first time for '4' with key '3'
В качестве альтернативы:
r=[]
for k in sorted(dc):
print dc[k]
if '3' in dc[k]:
r.append("'3' number {} with key: {}".format(len(r)+1,k))
производит:
["'3' number 1 with key: 1", "'3' number 2 with key: 2", "'3' number 3 with key: 3"]
Список r
будет иметь 3 строки в том порядке, что ключи dc
сортируют в , затем просто перебираем последовательность r
.
И если вы просто ищете для «первого» 3
затем в покое, вы можете использовать список понимание:
>>> l=[i for sub in [dc[k] for k in sorted(dc)] for i in sub if i == '3']
>>> l
['3', '3', '3']
>>> l[0]
'3'
>>> l[1:] #all the rest...
Поскольку dict не заказан, что вы подразумеваете под «первым» появлением «3»? – wim
стр. Именование вашей переменной 'dict' - плохая идея, потому что вы затеняете встроенный – wim
Спасибо Wim. Я не уверен, что это возможно. Есть три случая из 3, я имею в виду 1: ['2', '3'] в этом, 3 появляется 1 раз –