Pythonic从字典中增加和分配id的方法

时间:2012-03-08 21:41:55

标签: dictionary if-statement python

这似乎是一种非常常见的模式:

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并坚持使用。

5 个答案:

答案 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)