title: Plotly hover_data does not work with dict?
body: <p>As stated from <a href="https://plotly.github.io/plotly.py-docs/generated/plotly.express.scatter_mapbox.html" rel="nofollow noreferrer">plotly docs</a> it is possible to pass dict with key set to columns and values set to booleans in order to manage what is shown and what's not or formatting: </p>
  
  <pre class="lang-py prettyprint-override"><code>hover_data = {"killed":True,"group":True,"lat":False,"long":False,"year":False}
  
  fig = px.scatter_mapbox(df_clean, lat="lat", lon="long", hover_name="hover_title",
                          animation_frame="year",
                          color_discrete_sequence=["red"],
                          opacity = 1,
                          zoom=1, size="killed",
                          hover_data=hover_data)
  </code></pre>
  
  <p>This produces </p>
  
  <pre><code>RuntimeError: dictionary changed size during iteration
  </code></pre>
  
  <p>What do I miss here? 
  I saw someone used dict({...}) in plotly context but i does not see how it works neither it does not help.</p>
  
  <pre><code>Traceback: 
  ---------------------------------------------------------------------------
  RuntimeError                              Traceback (most recent call last)
  &lt;ipython-input-75-881c99be1dc5&gt; in &lt;module&gt;
        7                         opacity = 1,
        8                         zoom=1, size="killed",
  ----&gt; 9                         hover_data=hover_data)
       10 # fig.update_layout(mapbox_style="open-street-map")
       11 
  
  /opt/anaconda/envs/Python3/lib/python3.6/site-packages/plotly/express/_chart_types.py in scatter_mapbox(data_frame, lat, lon, color, text, hover_name, hover_data, custom_data, size, animation_frame, animation_group, category_orders, labels, color_discrete_sequence, color_discrete_map, color_continuous_scale, range_color, color_continuous_midpoint, opacity, size_max, zoom, center, mapbox_style, title, template, width, height)
     1008     symbol mark on a Mapbox map.
     1009     """
  -&gt; 1010     return make_figure(args=locals(), constructor=go.Scattermapbox)
     1011 
     1012 
  
  /opt/anaconda/envs/Python3/lib/python3.6/site-packages/plotly/express/_core.py in make_figure(args, constructor, trace_patch, layout_patch)
     1366 
     1367     args, trace_specs, grouped_mappings, sizeref, show_colorbar = infer_config(
  -&gt; 1368         args, constructor, trace_patch
     1369     )
     1370     grouper = [x.grouper or one_group for x in grouped_mappings] or [one_group]
  
  /opt/anaconda/envs/Python3/lib/python3.6/site-packages/plotly/express/_core.py in infer_config(args, constructor, trace_patch)
     1209             all_attrables += [group_attr]
     1210 
  -&gt; 1211     args = build_dataframe(args, all_attrables, array_attrables)
     1212     if constructor in [go.Treemap, go.Sunburst] and args["path"] is not None:
     1213         args = process_dataframe_hierarchy(args)
  
  /opt/anaconda/envs/Python3/lib/python3.6/site-packages/plotly/express/_core.py in build_dataframe(args, attrables, array_attrables)
      940         # argument_list and field_list ready, iterate over them
      941         # Core of the loop starts here
  --&gt; 942         for i, (argument, field) in enumerate(zip(argument_list, field_list)):
      943             length = len(df_output)
      944             if argument is None:
  
  RuntimeError: dictionary changed size during iteration
  </code></pre>