如何使用 python 中的 'identitity' 标签将元素映射到自身?
How to map elements to themselves with an 'identitity' label in python?
现在我有:
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'
如何在不专门将它们添加到标签中的情况下将它们映射到自身?
是否存在将所有元素映射到自身的标识标签之类的东西?
根据我对您问题的理解,如果您尝试访问 label[3]
而密钥不存在,您需要 label[3] = 3
?
您可以构建一个自定义 defaultdict
工厂,将键值对插入到您的标签字典中……可能。见下方评论
https://docs.python.org/2/library/collections.html#collections.defaultdict.default_factory
或者如果密钥不存在,您可以return一个默认值
label.get(key, default_value)
最后,你可以做一个简单的 try/except 块
try:
y[i] = label[row[5]]
except:
do something
您可以实现自己的字典 class:
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 = {"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'
如何在不专门将它们添加到标签中的情况下将它们映射到自身? 是否存在将所有元素映射到自身的标识标签之类的东西?
根据我对您问题的理解,如果您尝试访问 label[3]
而密钥不存在,您需要 label[3] = 3
?
您可以构建一个自定义 defaultdict
工厂,将键值对插入到您的标签字典中……可能。见下方评论
https://docs.python.org/2/library/collections.html#collections.defaultdict.default_factory
或者如果密钥不存在,您可以return一个默认值
label.get(key, default_value)
最后,你可以做一个简单的 try/except 块
try:
y[i] = label[row[5]]
except:
do something
您可以实现自己的字典 class:
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