你还可以记录元素出现的次数。使用字典来实现,并在每次出现时进行递增操作:
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
将按照dc
的键排序的顺序包含3个字符串,然后只需迭代序列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:]
dict
是个不好的主意,因为会遮蔽内置函数。 - wim