【问题标题】:How to index a subdictionary and creating a nested for loop如何索引子字典并创建嵌套的 for 循环
【发布时间】:2019-04-14 16:04:09
【问题描述】:

我有一个列表,如下所示:

>> 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'},

你能推荐一种比我更好的方法来执行索引吗?

【问题讨论】:

  • 如果您使用dict,其中键按顺序升​​序,您应该使用list。在这种情况下,listdicts

标签: python dictionary for-loop indexing


【解决方案1】:
new_thing = {q[0]: dict(zip(thing[0], q[1:])) for q in thing[1:]}

【讨论】:

  • 谢谢!它有效,我将只做一些小改动来更新列顺序。
猜你喜欢
  • 2021-07-25
  • 2019-03-29
  • 2022-01-03
  • 2019-09-30
  • 2022-10-01
  • 2020-11-02
  • 2020-09-13
  • 1970-01-01
  • 2020-06-14
相关资源
最近更新 更多