In order to set a lookup field using CSOM, the ID of the item from the lookup list should be specified. This ID can then be used to set the listitem's FieldLookupValue.
FieldLookupValue lv = new FieldLookupValue();
lv.LookupId = 1;
item["Project"] = lv;
item.Update();
clientContext.ExecuteQuery();
Below is provided the complete example for specifying a lookup field using CSOM
public static void SetListItemLookupValue()
{
ClientContext clientContext = new ClientContext("http://intranet.contoso.com/");
List list = clientContext.Web.Lists.GetByTitle("Docs");
FieldCollection fields = list.Fields;
CamlQuery camlQueryForItem = new CamlQuery();
camlQueryForItem.ViewXml = @"<View>
<Query>
<Where>
<Eq>
<FieldRef Name='ID'/>
<Value Type='Counter'>4</Value>
</Eq>
</Where>
</Query>
</View>";
ListItemCollection listItems = list.GetItems(camlQueryForItem);
clientContext.Load(listItems, items => items.Include
(listItem => listItem["Project"],
listItem => listItem["Editor"],
listItem => listItem["Title"]));
clientContext.ExecuteQuery();
ListItem item = listItems[0];
FieldLookupValue lv = item["Project"] as FieldLookupValue;
if(lv == null) lv = new FieldLookupValue();
lv.LookupId = 1;
item["Project"] = lv;
item.Update();
clientContext.ExecuteQuery();
}