这似乎是一种非常常见的模式:
for row in reader:
c1=row[0]
if ids.has_key(c1):
id1=ids.get(c1)
else:
currid+=1
id1=currid
ids[c1]=currid
我想知道是否有更好的方法来实现这一目标。至于单行if语句,我可以这么做:
id1=ids.get(c1) if ids.has_key(c1) else currid+1
但是如果if条件被执行并且如果if条件通过则将c-> id1粘贴到字典中,那么我就会坚持使用currid并坚持使用。
答案 0 :(得分:5)
如果ids从0开始:
for row in reader:
id1 = ids.setdefault(row[0], len(ids))
(旁白:has_key
被视为已弃用。请使用x in d
代替d.has_key(x)
。)
答案 1 :(得分:4)
如果您不介意更改ids
的定义方式,那么您可以使用此方法(全部在标准库中):
ids = collections.defaultdict (itertools.count ().next)
用法非常简单:
print (ids["lol"])
答案 2 :(得分:1)
currid += c1 not in ids
id1 = ids.setdefault(c1, currid)
答案 3 :(得分:0)
更多pythonyc,具有相同的语义:
for row in reader:
c1 = row[0]
if c1 not in ids:
currid += 1
ids[c1] = currid
id1 = ids[c1]
答案 4 :(得分:-1)
请改用:
id1 = ids.get(cl, currid + 1)