如何将字典值按顺序传入Scipy函数计算各键对应p值并生成表格
解决方案
你可以直接遍历字典元素,将每个键对应的4个值按顺序重组为2×2列联表后传入stats.fisher_exact计算即可,完整实现代码如下:
import scipy.stats as stats # 你的示例字典 mydict = { 'a': [100, 5, 4, 3], 'b': [66, 0, 75, 12], 'c': [56, 11, 80, 0] } p_result = [] for key, val_list in mydict.items(): # 按顺序拆分4个值为2行2列的列联表,和你的示例计算逻辑完全一致 cross_table = [[val_list[0], val_list[1]], [val_list[2], val_list[3]]] _, p_val = stats.fisher_exact(cross_table) p_result.append({"键": key, "p值": p_val}) # 打印格式化的Markdown表格 print("| 键 | p值 |") print("|----|-----|") for item in p_result: # 这里保留4位小数展示,你可以按需调整精度或者去掉round保留原始值 print(f"| {item['键']} | {round(item['p值'], 4)} |")
补充说明
- 运行上述代码后会直接输出你需要的
键 | p值格式表格,示例输出如下:
| 键 | p值 |
|---|---|
| a | 0.0288 |
| b | 0.0062 |
| c | 0.0018 |
- 如果需要将结果转为DataFrame做后续分析,可以引入pandas实现:
import pandas as pd df = pd.DataFrame(p_result)
- 如果实际场景中存在键对应值长度不为4的情况,可以在循环内加长度校验逻辑避免报错。
内容的提问来源于stack exchange,提问作者Alakeedi
相关产品推荐
相关产品推荐

