在python中,如何使用“identity”标签将元素映射到自身?

在python中,如何使用“identity”标签将元素映射到自身?,python,import,label,mapping,identity,Python,Import,Label,Mapping,Identity,现在我有: label = {"A" : 1, "B" : 2} x = np.zeros((150,4)) y = np.zeros(150) i = 0 with open('data.csv', newline='') as csvfile: reader = csv.reader(csvfile, delimiter=',') print(next(reader, None)) for row in reader: x[i,:] = row[1:

现在我有:

label = {"A" : 1, "B" : 2}
x = np.zeros((150,4))
y = np.zeros(150)
i = 0

with open('data.csv', newline='') as csvfile:
    reader = csv.reader(csvfile, delimiter=',')
    print(next(reader, None))
    for row in reader:
        x[i,:] = row[1:5]
        y[i] = label[row[5]] #it's about this line
        i += 1
但如果行包含1、2或3,则会抛出一个错误,因为它们之间没有映射

KeyError: '3'
如何将它们映射到自己,而不将它们添加到标签中?
是否有一个标识标签可以将所有元素映射到它们自身?

根据我对您问题的理解,如果您试图访问标签[3],但密钥不存在,您希望标签[3]=3

您可以构建一个自定义的defaultdict工厂,将键值对插入标签dict。。。可能地见下面的评论

或者,如果密钥不存在,则可以返回默认值

label.getkey,默认值

最后,您只需执行一个简单的try/except块

try: 
    y[i] = label[row[5]]
except:
    do something

您可以实现自己的字典类:

class id_dict(dict):
    def __missing__(self, key):
        return key

labels = id_dict({"A" : 1, "B" : 2})

print(labels["A"])
print(labels[3])
输出将是

1
3

您能否提供所需的输出以帮助使问题更清楚?label.getrow[5],row[5]?我认为默认的_工厂不是以键作为参数调用的。所以你不能在那里插入钥匙。这很漂亮。我不知道我能做到这一点。非常感谢。很高兴它对你有用但实际上对于您的用例标签.getrow[5],Rawing建议的第[5]行也可以使用。如果不缺少输入,返回它是什么意思?你能举个例子吗?我将标签传递给构造函数:labels=id_dict{A:1,B:2}。请看:如果给定了一个位置参数,并且它是一个映射对象,则会创建一个字典,其中包含与映射对象相同的键值对。