You should be able to do this with only one mapping 1 :
You need to match KeyValuePair<User, bool>with UserDto. This is necessary so that AutoMapper can display the contents of the dictionary into the content List<T>that we ultimately create (more explanation can be found in this answer ).
Mapper.CreateMap<KeyValuePair<User, bool>, UserDto>()
.ForMember(dest => dest.Username, opt => opt.MapFrom(src => src.Key.UserName))
.ForMember(dest => dest.Avatar, opt => opt.MapFrom(src => src.Key.Avatar))
.ForMember(dest => dest.IsFriend, opt => opt.MapFrom(src => src.Value));
Then use matching in your call .Map:
Mapper.Map<Dictionary<User, bool>, List<UserDto>>(...);
, AutoMapper Dictionary List, ( KeyValuePair<User, bool> UserDto).
. , User UserDto:
Mapper.CreateMap<User, UserDto>();
Mapper.CreateMap<KeyValuePair<User, bool>, UserDto>()
.ConstructUsing(src => Mapper.Map<User, UserDto>(src.Key))
.ForMember(dest => dest.IsFriend, opt => opt.MapFrom(src => src.Value));
1 AutoMapper 2.0