Проблема нетривиальна, если речь идет о объектах хоста или более сложном объекте, чем сумка значений
Еще одна вещь, которую следует иметь в виду: графы объектов, которые содержат циклы. Обычно это не сложно - просто сохраните Set
уже посещенных исходных объектов, но часто забывайте.
Вероятно, вы должны написать функцию глубокого слияния, которая ожидает только примитивные значения и простые объекты - в большинстве тех типов, которые алгоритм структурированного клона может обрабатывать - в качестве источников слияния. Бросьте, если он сталкивается с чем-либо, с которым он не может справиться или просто назначить по ссылке вместо глубокого слияния.
Другими словами, алгоритм одноразового использования не требуется, вам либо нужно катиться самостоятельно, либо смотреть для библиотечного метода, который распространяется на ваши прецеденты.
Спасибо за обновление с образцом df
. Я не совсем уверен, какова ваша цель, но у меня есть данные, проходящие через и отображающие df
. Вот функциональный пример:
dict_form = {
'Date': [2008, 2008, 2008, 2008, 2008],
'Sport': ['Yoga', 'Yoga', 'Yoga', 'Yoga', 'Yoga'],
'Gender': ['Male', 'Male', 'Male', 'Male', 'Male'],
'Age': ['6-12', '13-17', '18-24', '25-34', '35-44'],
'Players': [2308.54, 3551.60, 2663.70, 3551.60, 2130.96],
'Core': [692.562, 1065.480, 799.110, 1065.480, 639.288],
}
df = pandas.DataFrame.from_dict(dict_form)
app = dash.Dash(__name__)
app.layout = html.Div(children=[
html.Div(children=[
html.H3('Age:', style={'paddingRight': '30px', 'fontSize': 18}),
dcc.Checklist(
id='Age',
options=[
{'label': i, 'value': i} for i in df['Age']],
values=['18-24']
)
]),
html.Div(children=[
html.H3('Gender:', style={'paddingRight': '30px', 'fontSize': 18}),
dcc.Dropdown(
id='Gender',
options=[
{'label': 'Male', 'value': 'Male'},
{'label': 'Female', 'value': 'Female'}
],
value='Male'
)
], style={'width': '33%', 'display': 'inline-block'}),
html.H3('Activity:', style={'paddingRight': '30px', 'fontSize': 18}),
dcc.Dropdown(
id='Sport',
options=[
{'label': i, 'value': i} for i in df['Sport']],
value='Yoga'
),
html.Div([
dcc.Graph(id='linear')]),
html.Div([
dcc.Graph(id='linear2')
])
], style={'width': '33%', 'display': 'inline-block'})
@app.callback(
dash.dependencies.Output('linear', 'figure'),
[dash.dependencies.Input('Gender', 'value'),
dash.dependencies.Input('Sport', 'value'),
dash.dependencies.Input('Age', 'values')])
def update_graph(gender_name, sport_name, age_name):
df1 = df[df['Gender'] == gender_name]
df2 = df1[df1['Sport'] == sport_name]
df3 = df2[df2['Age'].isin(age_name)]
total_x = df3.Age
trace1 = go.Bar(x=total_x, y=df3['Players'], name='Players')
trace2 = go.Bar(x=total_x, y=df3['Core'], name='Core')
total_layout = go.Layout(xaxis={'title': 'Year'},
yaxis={'title': 'Participants'},
title='Core Player Comparison',
hovermode='closest')
return {'data': [trace2, trace1],
'layout': [total_layout]}
if __name__ == '__main__':
app.run_server(debug=True, threaded=True)
А вот скриншот карты: