首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更改字典列表中的键名

如何更改字典列表中的键名
EN

Stack Overflow用户
提问于 2021-03-03 17:56:19
回答 1查看 84关注 0票数 2

我有一个如下所示的df:

代码语言:javascript
复制
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_latclient_lng存储route_id。因此,在我的最终列表中,我应该有n个字典,其中n是唯一route_id的数量。从上面的df中,我应该在我的列表中有3本字典,其中的条目应该如下所示:

代码语言:javascript
复制
{'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_latclient_lng的数量而有所不同。

要生成具有上述结构的条目的字典列表,我将使用以下代码:

代码语言:javascript
复制
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)

我的清单是这样的:

代码语言:javascript
复制
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的数量。因此,我想要的输出应该如下所示:

代码语言:javascript
复制
[{'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'}]

如果有人知道怎么做的话,我非常感谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-03 18:11:07

使用enumerate总是很好地创建索引。您可以更改i开始使用参数start=1的位置。

这样做的工作是:

代码语言:javascript
复制
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

代码语言:javascript
复制
[{'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'}]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66462402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档