我有一个如下所示的df:
route_id client_lat client_lng
BR0068 -23.7424 -46.7066
BR0068 -23.7424 -46.7066
BR0068 -23.7424 -46.7066
BR0068 -23.7424 -46.7066
BR0068 -23.7424 -46.7066
BR0068 -23.7424 -46.7066
BR0068 -23.7424 -46.7066
BR0068 -23.7424 -46.7066
BR0068 -23.7424 -46.7066
BR0068 -23.7424 -46.7066
BR0073 -23.7424 -46.7066
BR0073 -23.7424 -46.7066
BR0073 -23.7424 -46.7066
BR0073 -23.7424 -46.7066
BR0073 -23.7424 -46.7066
BR0073 -23.7424 -46.7066
BR0073 -23.7424 -46.7066
BR0073 -23.7424 -46.7066
BR0073 -23.7424 -46.7066
BR0073 -23.7424 -46.7066
BR0074 -23.7424 -46.7066
BR0074 -23.7424 -46.7066
BR0074 -23.7424 -46.7066
BR0074 -23.7424 -46.7066
BR0074 -23.7424 -46.7066
BR0074 -23.7424 -46.7066
BR0074 -23.7424 -46.7066
BR0074 -23.7424 -46.7066
BR0074 -23.7424 -46.7066如你所见,每个route_id都有许多纬度和经度。我想做的是生成一个字典列表。每个字典都会根据每个client_lat和client_lng存储route_id。因此,在我的最终列表中,我应该有n个字典,其中n是唯一route_id的数量。从上面的df中,我应该在我的列表中有3本字典,其中的条目应该如下所示:
{'start1': 'geo!-23.7424,-46.7066',
'start2': 'geo!-23.7424,-46.7066',
'start3': 'geo!-23.7424,-46.7066',
'start4': 'geo!-23.7424,-46.7066',
...}每个字典的条目数量将根据每个client_lat和client_lng的数量而有所不同。
要生成具有上述结构的条目的字典列表,我将使用以下代码:
lista = []
for i in data.route_id.unique():
start_points = {f"start{k + 1}": "geo!" + data.loc[k, 'client_lat'] + ","
+ data.loc[k, 'client_lng'] for k in range(0, len(data)) if data.loc[k, "route_id"] == i}
lista.append(start_points)我的清单是这样的:
lista = [{'start1': 'geo!-23.7424,-46.7066',
'start2': 'geo!-23.7424,-46.7066',
'start3': 'geo!-23.7424,-46.7066',
'start4': 'geo!-23.7424,-46.7066',
'start5': 'geo!-23.7424,-46.7066',
'start6': 'geo!-23.7424,-46.7066',
'start7': 'geo!-23.7424,-46.7066',
'start8': 'geo!-23.7424,-46.7066',
'start9': 'geo!-23.7424,-46.7066',
'start10': 'geo!-23.7424,-46.7066'},
{'start11': 'geo!-23.7424,-46.7066',
'start12': 'geo!-23.7424,-46.7066',
'start13': 'geo!-23.7424,-46.7066',
'start14': 'geo!-23.7424,-46.7066',
'start15': 'geo!-23.7424,-46.7066',
'start16': 'geo!-23.7424,-46.7066',
'start17': 'geo!-23.7424,-46.7066',
'start18': 'geo!-23.7424,-46.7066',
'start19': 'geo!-23.7424,-46.7066',
'start20': 'geo!-23.7424,-46.7066'},
{'start21': 'geo!-23.7424,-46.7066',
'start22': 'geo!-23.7424,-46.7066',
'start23': 'geo!-23.7424,-46.7066',
'start24': 'geo!-23.7424,-46.7066',
'start25': 'geo!-23.7424,-46.7066',
'start26': 'geo!-23.7424,-46.7066',
'start27': 'geo!-23.7424,-46.7066',
'start28': 'geo!-23.7424,-46.7066',
'start29': 'geo!-23.7424,-46.7066'}]它将每个字典存储在我的列表中,但是每个字典中的键应该从1到m,其中m是每个route_id的lat和lng的数量。因此,我想要的输出应该如下所示:
[{'start1': 'geo!-23.7424,-46.7066',
'start2': 'geo!-23.7424,-46.7066',
'start3': 'geo!-23.7424,-46.7066',
'start4': 'geo!-23.7424,-46.7066',
'start5': 'geo!-23.7424,-46.7066',
'start6': 'geo!-23.7424,-46.7066',
'start7': 'geo!-23.7424,-46.7066',
'start8': 'geo!-23.7424,-46.7066',
'start9': 'geo!-23.7424,-46.7066',
'start10': 'geo!-23.7424,-46.7066'},
{'start1': 'geo!-23.7424,-46.7066',
'start2': 'geo!-23.7424,-46.7066',
'start3': 'geo!-23.7424,-46.7066',
'start4': 'geo!-23.7424,-46.7066',
'start5': 'geo!-23.7424,-46.7066',
'start6': 'geo!-23.7424,-46.7066',
'start7': 'geo!-23.7424,-46.7066',
'start8': 'geo!-23.7424,-46.7066',
'start9': 'geo!-23.7424,-46.7066',
'start10': 'geo!-23.7424,-46.7066'},
{'start1': 'geo!-23.7424,-46.7066',
'start2': 'geo!-23.7424,-46.7066',
'start3': 'geo!-23.7424,-46.7066',
'start4': 'geo!-23.7424,-46.7066',
'start5': 'geo!-23.7424,-46.7066',
'start6': 'geo!-23.7424,-46.7066',
'start7': 'geo!-23.7424,-46.7066',
'start8': 'geo!-23.7424,-46.7066',
'start9': 'geo!-23.7424,-46.7066'}]如果有人知道怎么做的话,我非常感谢你的帮助。
发布于 2021-03-03 18:11:07
使用enumerate总是很好地创建索引。您可以更改i开始使用参数start=1的位置。
这样做的工作是:
data = []
for route in df['route_id'].unique():
data.append({f'start_{i}': f'geo!{x["client_lat"]},{x["client_lng"]}' for i, x in enumerate(df[df['route_id'] == route].to_dict('records'), start=1)})打印data
[{'start_1': 'geo!-23.7424,-46.7066',
'start_2': 'geo!-23.7424,-46.7066',
'start_3': 'geo!-23.7424,-46.7066',
'start_4': 'geo!-23.7424,-46.7066',
'start_5': 'geo!-23.7424,-46.7066',
'start_6': 'geo!-23.7424,-46.7066',
'start_7': 'geo!-23.7424,-46.7066',
'start_8': 'geo!-23.7424,-46.7066',
'start_9': 'geo!-23.7424,-46.7066',
'start_10': 'geo!-23.7424,-46.7066'},
{'start_1': 'geo!-23.7424,-46.7066',
'start_2': 'geo!-23.7424,-46.7066',
'start_3': 'geo!-23.7424,-46.7066',
'start_4': 'geo!-23.7424,-46.7066',
'start_5': 'geo!-23.7424,-46.7066',
'start_6': 'geo!-23.7424,-46.7066',
'start_7': 'geo!-23.7424,-46.7066',
'start_8': 'geo!-23.7424,-46.7066',
'start_9': 'geo!-23.7424,-46.7066',
'start_10': 'geo!-23.7424,-46.7066'},
{'start_1': 'geo!-23.7424,-46.7066',
'start_2': 'geo!-23.7424,-46.7066',
'start_3': 'geo!-23.7424,-46.7066',
'start_4': 'geo!-23.7424,-46.7066',
'start_5': 'geo!-23.7424,-46.7066',
'start_6': 'geo!-23.7424,-46.7066',
'start_7': 'geo!-23.7424,-46.7066',
'start_8': 'geo!-23.7424,-46.7066',
'start_9': 'geo!-23.7424,-46.7066'}]https://stackoverflow.com/questions/66462402
复制相似问题