如何索引子字典并创建嵌套的 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'},

你能提出一种比我更好的方式来执行索引的方法吗?


慕侠2389804
浏览 171回答 1
1回答

幕布斯7119047

new_thing = {q[0]: dict(zip(thing[0], q[1:])) for q in thing[1:]}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python