使用多个字典值替换列中的值

时间:2015-06-30 21:06:52

标签: python regex

我正在处理鸟类分类,需要标准化通用名称。标准化的文件由林地公会物种组成,由一列包含旧的通用名称组成。第二个文件是一个字典,列出旧的通用名称(键)和新的通用名称(值)。例如,

dict = {'BLUE GROUSE' : "DUSKY GROUSE", 'PLAIN TITMOUSE' : ["OAK TITMOUSE", 'JUNIPER TITMOUSE"], 'RUBY-THR. HUMMINGBIRD' : 'RUBY-THROATED HUMMINGBIRD'}

我想用新名称替换旧名称,并使用replace:

成功完成了此操作
WoodlandGld["CommonName"].replace(StdCommonNames, inplace=True)

如果一个物种被分裂,正如普通山雀分裂成橡树和杜松山雀所证明的那样,该值是一个列表而替换取代了第一次出现(这是有道理的)。

113 PYGMY NUTHATCH

114 TUFTED TITMOUSE

115 BLACK-CRESTED TITMOUSE

116 OAK TITMOUSE

117 BLACK-CAPPED CHICKADEE

有没有办法不仅可以替换第一次出现(Oak Titmouse),还可以在遇到钥匙时添加Juniper Titmouse? 替换正确的说法来实现这个目标吗?

2 个答案:

答案 0 :(得分:0)

f1 = ['BLUE GROUSE', 'PLAIN TITMOUSE', 'RUBY-THR. HUMMINGBIRD'] 
f2 = {'BLUE GROUSE' : 'DUSKY GROUSE', 
      'PLAIN TITMOUSE' : ['OAK TITMOUSE', 'JUNIPER TITMOUSE'], 
      'RUBY-THR. HUMMINGBIRD' : 'RUBY-THROATED HUMMINGBIRD'
     }

for k,v in zip(f2.keys(), f2.values()):    
    if type(v) == str:
        f1[f1.index(k)] = v
    else:
        f1[f1.index(k)] = v[0]
        f1.extend(v[1:])

f1.sort()   
print "Standardized list:", f1   

输出:

Standardized list: ['DUSKY GROUSE', 'JUNIPER TITMOUSE', 'OAK TITMOUSE', 'RUBY-THROATED HUMMINGBIRD']

注意:WoodlandGld的类型不清楚,即字典或什么,因此如果您想要更精确的帮助,请添加更多信息。

答案 1 :(得分:0)

如果你想用dict中的值(一个元素或一个列表)替换名称,

name = ['BLUE GROUSE', 'PLAIN TITMOUSE', 'RUBY-THR. HUMMINGBIRD', 'OTHER KINDS'] 
dict = {'BLUE GROUSE' : 'DUSKY GROUSE',
      'PLAIN TITMOUSE' : ['OAK TITMOUSE', 'JUNIPER TITMOUSE'], 
      'RUBY-THR. HUMMINGBIRD' : 'RUBY-THROATED HUMMINGBIRD'
     }

for k in name:
    if k in dict:
        name[name.index(k)] = dict[k]

print ("Standardized list:\n", name)

输出

Standardized list: 
['DUSKY GROUSE', ['OAK TITMOUSE', 'JUNIPER TITMOUSE'], 'RUBY-THROATED HUMMINGBIRD', 'OTHER KINDS']