【发布时间】:2021-07-12 13:59:14
【问题描述】:
我有一个包含 18k 个字典元素的列表(我只显示了其中的一部分),我需要在其中替换一个键并提取列表的一个元素。例如,以下是我的字典列表。
[{'name': 'Achieving_Results_in_a_Challenging_Business_Context_rank = 1.0',
'column_index': 387,
'hypergeometric_p_values': [0.04813691453106806, 0.951863085468932],
'percent_in_group': [0.09896233666410453,
0.10215470469694621,
0.11547714514835605]},
{'name': 'Achieving_Results_in_a_Challenging_Business_Context_rank = 10.0',
'column_index': 387,
'hypergeometric_p_values': [0.00014612920992348574, 0.9998538707900765],
'percent_in_group': [0.08647194465795542,
0.09316385056580376,
0.1210906174819567]},
{'name': 'Achieving_Results_in_a_Challenging_Business_Context_rank = 2.0',
'column_index': 387,
'hypergeometric_p_values': [0.044335711647001765, 0.9556642883529982],
'percent_in_group': [0.09934665641813989,
0.10261974887614324,
0.11627906976744186]},
{'name': 'Achieving_Results_in_a_Challenging_Business_Context_rank = 3.0',
'column_index': 387,
'hypergeometric_p_values': [0.000497701807800938, 0.999502298192199],
'percent_in_group': [0.08724058416602613,
0.09331886529220276,
0.11868484362469928]},
{'name': 'Achieving_Results_in_a_Challenging_Business_Context_rank = 4.0',
'column_index': 387,
'hypergeometric_p_values': [0.07220994726016502, 0.927790052739835],
'percent_in_group': [0.08954650269023828,
0.0922337622074097,
0.10344827586206896]}]
我需要将hypergeometric_p_values 更改为简单的p_values,并且只从值列表中获取第一个元素。另外,我需要使用列表中的元素 0 和 1 创建一个新的键名 percent_missing_group_1 和 percent_missing_group_2。
所以,数据应该是这样的(对于单个字典):
[{'name': 'Achieving_Results_in_a_Challenging_Business_Context_rank = 1.0',
'column_index': 387,
'p_values': 0.04813691453106806,
'percent_missing_in_group_1': 0.09896233666410453,
'percent_missing_in_group_2': 0.10215470469694621
}]
但我已经坚持了一段时间,尝试了很多不同的方法,但都失败了。以下一个有效,但仅用于重命名密钥
data = [{"p_value" if k == 'hypergeometric_p_values' else k:v for k,v in d.items()} for d in data]
另外,当我尝试按以下方式进行操作时:
for item in cat:
for k,v in item.items():
if k == 'hypergeometric_p_values':
item['p_value'] = v[0]
del item['hypergeometric_p_values']
print(item)
我收到以下错误:
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
<ipython-input-397-5298b96a56bc> in <module>
10
11 for item in cat:
---> 12 for k,v in item.items():
13 if k == 'hypergeometric_p_values':
14 item['p_value'] = v[0]
RuntimeError: dictionary keys changed during iteration
有没有更简单的方法可以让我一次重命名多个键?
【问题讨论】:
标签: python dictionary list-comprehension