Assign to NEW by key in a Postgres trigger
First of all, there is no &quot;trigger body&quot; (unlike Oracle). In Postgres you have a trigger function (also, misleadingly, called &quot;procedure&quot;) with a function body and 0-n triggers (without body) calling this function.
The special variable NEW in plpgsql trigger functions is neither a map nor an array; it's a record holding the new row:

NEW
Data type RECORD; variable holding the new database row for
INSERT/UPDATE operations in row-level triggers. This variable is
unassigned in statement-level triggers and for DELETE operations.

Assigning to a field (or column) of NEW is simple. The documented assignment operator is :=. (Since Postgres 9.4 also =.)
NEW.some_key := 5;

What you seem to be looking for is to parameterize the column name, which isn't quite as simple.
The additional module hstore provides the #= operator. (It's included in pretty much all standard distributions.) Install the module once per database with:
CREATE EXTENSION hstore;

Then you can:
NEW := NEW #= '&quot;some_key&quot;=&gt;&quot;5&quot;'::hstore;

Sets the column some_key to '5' - if the column exists.

An explicit cast to hstore is optional. The operator #= coerces a string literal to the right data type automatically.
hstore only stores text strings, so a given literal for the value may have to be cast twice - a very minor drawback compared to alternative solutions.
The given string literal has to fit the data type of the column, or an exception is raised.
If no column with the given name exists, nothing is changed, no exception raised.

Related answer with details and an alternative solution:

How to set value of composite variable field using dynamic SQL

Code example
CREATE OR REPLACE FUNCTION trg_tbl_ins_bef()
  RETURNS trigger AS
$func$
BEGIN
   NEW := NEW #= '&quot;some_key&quot;=&gt;&quot;5&quot;';
   RETURN NEW;
END
$func$ LANGUAGE plpgsql;

CREATE TRIGGER ins_bef
BEFORE INSERT ON tbl
FOR EACH ROW EXECUTE PROCEDURE trg_tbl_ins_bef();

Postgres 11 or later allows to replace the misleding term PROCEDURE (the old syntax will keep working for the foreseeable future):
...
FOR EACH ROW EXECUTE FUNCTION trg_tbl_ins_bef();