所以我有一个看起来像这样的列表:
users = [{'id': 11, 'name': 'First'}, {'id': 22, 'name': 'Second'}, {'id':33, 'name': 'Third'}]
我想要做的是通过传递id,创建新用户并用新用户替换旧用户来更新用户名。 我想获取更新的用户列表,如下所示:
updated_users = list(map(update, users))
如果我可以发送id来更新func作为参数,那么我想要做的事情看起来像这样:
def update(id):
if user['id'] == id:
new_user = some_fun()
user = new_user
return user
我的更新功能应该如何?
答案 0 :(得分:1)
我不知道您为什么要使用地图,我认为这是一个错误的方法,因为地图不适用于此类事情(您可以确定它可以工作,但绝不是要走的路)
您可以执行以下操作:
input= tf.keras.Input(shape=(T,D,D))
x= tf.keras.layers.Conv2D(f,(3,3),activation='relu',padding='same',data_format='channels_first')(input)
x= tf.keras.layers.Conv2D(f,(3,3),activation='relu',padding='same',
kernel_initializer=tf.keras.initializers.Orthogonal(),data_format='channels_first')(x)
x = tf.keras.layers.BatchNormalization()(x)
x= tf.keras.layers.MaxPool2D((2,2),data_format='channels_first')(x)
x= tf.keras.layers.Conv2D(f,(3,3),activation='relu',padding='same',data_format='channels_first')(input)
x= tf.keras.layers.Conv2D(f,(3,3),activation='relu',padding='same',
kernel_initializer=tf.keras.initializers.Orthogonal(),data_format='channels_first')(x)
x = tf.keras.layers.BatchNormalization()(x)
x= tf.keras.layers.MaxPool2D((2,2),data_format='channels_first')(x)
x= tf.keras.layers.Conv2D(f,(3,3),activation='relu',padding='same',
kernel_initializer=tf.keras.initializers.Orthogonal(),data_format='channels_first')(input)
x= tf.keras.layers.Conv2D(f,(3,3),activation='relu',padding='same',
kernel_initializer=tf.keras.initializers.Orthogonal(),data_format='channels_first')(x)
x = tf.keras.layers.BatchNormalization()(x)
x= tf.keras.layers.MaxPool2D((2,2),data_format='channels_first')(x)
x = tf.keras.layers.Reshape((f,D*D//4))(x)
x=tf.keras.layers.LSTM(f)(x)
x = tf.keras.layers.BatchNormalization()(x)
x = tf.keras.layers.Dense(f,activation='relu')(x)
x = tf.keras.layers.Dense(2,activation='softmax')(x)
model =tf.keras.Model(inputs=input, outputs=x)
model.compile(optimizer=tf.keras.optimizers.Adam(lr=0.00001),
loss='categorical_crossentropy')
model.fit(generate_data(train_dir,batch_size),
steps_per_epoch=len(os.listdir(train_dir))//batch_size,epochs=6,class_weight=class_weight)
输出:
users = [{'id': 11, 'name': 'First'}, {'id': 22, 'name': 'Second'}, {'id':33, 'name': 'Third'}]
def update(id, new_name):
for user in users:
if user["id"] == id:
user["name"] = new_name
return
users.append({'id':id,'name':new_name}) # if not exist add user
print(users)
update(11,"Last")
update(1, "New_First")
print(users)