python - 如何索引子字典并创建嵌套的 for 循环
问题描述
我有一个列表列表,如下所示:
>> new_pd[:3]
[['PokedexNumber',
'Name',
'Type',
'Total',
'HP',
'Attack',
'Defense',
'SpecialAttack',
'SpecialDefense',
'Speed'],
[1.0, 'Bulbasaur', 'GrassPoison', 318.0, 45.0, 49.0, 49.0, 65.0, 65.0, 45.0],
[2.0, 'Ivysaur', 'GrassPoison', 405.0, 60.0, 62.0, 63.0, 80.0, 80.0, 60.0]]
我要创建的内容如下:
{1.0: {'Attack': 49.0,
'Defense': 49.0,
'HP': 45.0,
'Name': 'Bulbasaur',
'PokedexNumber': 1.0,
'SpecialAttack': 65.0,
'SpecialDefense': 65.0,
'Speed': 45.0,
'Total': 318.0,
'Type': 'GrassPoison'},
2.0: {'Attack': 62.0,
'Defense': 63.0,
'HP': 60.0,
'Name': 'Ivysaur',
所以从列表列表中,我想要一个大的嵌套字典。
为了创建它,我用 Python 编写了以下代码:
new_pd_keys = []
for i in range(1, len(new_pd)):
new_pd_keys.append(new_pd[i][0])
上面,我从第 1 列获取所有键并将它们保存到一个名为new_pd_keys
.
然后使用下面的代码来分配每个键的值:
for i in range(1,len(new_pd)):
new_pd_dict = {key:{'Attack':new_pd[i][5], 'Defense':new_pd[i][6], 'HP':new_pd[i][4],
'Name':new_pd[i][1], 'PokedexNumber':new_pd[i][0], 'SpecialAttack':new_pd[i][7],
'SpecialDefense':new_pd[i][8], 'Speed':new_pd[i][9], 'Total':new_pd[i][3],
'Type':new_pd[i][2]} for key in new_pd_keys }
但我所拥有的是我最后一行的属性。你可以看到下面的输出,它们都是一样的。
{1.0: {'Attack': 110.0,
'Defense': 120.0,
'HP': 80.0,
'Name': 'Volcanion',
'PokedexNumber': 721.0,
'SpecialAttack': 130.0,
'SpecialDefense': 90.0,
'Speed': 70.0,
'Total': 600.0,
'Type': 'FireWater'},
2.0: {'Attack': 110.0,
'Defense': 120.0,
'HP': 80.0,
'Name': 'Volcanion',
'PokedexNumber': 721.0,
'SpecialAttack': 130.0,
'SpecialDefense': 90.0,
'Speed': 70.0,
'Total': 600.0,
'Type': 'FireWater'},
你能推荐一种比我更好的方式来执行索引的方法吗?
解决方案
new_thing = {q[0]: dict(zip(thing[0], q[1:])) for q in thing[1:]}
推荐阅读
- angular - 角度检查日期在 Typescript 中有效
- python - 缺少 1 个必需的位置参数 Tkinter 库
- node.js - 检查hapijs中的图像分辨率
- firebase - 对 Firestore 的经过身份验证的 HTTP POST 调用
- python - - 不支持的操作数类型:“列表”和“列表”;用numpy数组解决?
- json - Render :json with include 不渲染具有不同模型名称的表数据
- node.js - 对象数组的猫鼬图
- ios - 使用 push 将视频放入 UIView 中,在 ios swift 中启动控件
- javascript - 如何在 DIV 调整大小时优化 CSS3 过渡?
- c# - 如何在C#中设置下载文件的CreationDate