使用地图更新python中的词典列表

时间:2019-12-25 18:39:26

标签: python dictionary

所以我有一个看起来像这样的列表:

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

我的更新功能应该如何?

1 个答案:

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