python - 如何将字典中冻结的键和值集转换为普通键和值?
问题描述
我有一个frozensets 键和值的字典:
{(frozenset(['Age = 70', 'SMOK = y', 'LAD = 75']), frozenset(['CHOL = 220'])): 1.0, (frozenset(['AL = 0.0', 'DIAB = y', 'LAD = 75']), frozenset(['LM = 30'])): 1.0}
我怎样才能把它转换成这样的普通字典?
{('(Age = 70, LAD = 40)', '(LM = 15)'): '1.0', ('(SEX = F, AL = 0.2, RCA = 85)', '(LM = 15)'): '1.0'}
解决方案
如果你只是想将冻结集转换为元组,你可以试试这个:
d1 = {(frozenset(['Age = 70', 'SMOK = y', 'LAD = 75']), frozenset(['CHOL = 220'])): 1.0, (frozenset(['AL = 0.0', 'DIAB = y', 'LAD = 75']), frozenset(['LM = 30'])): 1.0}
d2 = {tuple(map(tuple, k)): v for k, v in d1.items()}
输出
{(('SMOK = y', 'LAD = 75', 'Age = 70'), ('CHOL = 220',)): 1.0, (('DIAB = y', 'AL = 0.0', 'LAD = 75'), ('LM = 30',)): 1.0}
如果您希望格式与您的示例输出完全一样,您可以试试这个:
d3 = {tuple(map(lambda x: f'({x})', map(', '.join, map(tuple, k)))): str(v) for k, v in d1.items()}
输出:(与您的输出格式完全相同)
{('(SMOK = y, LAD = 75, Age = 70)', '(CHOL = 220)'): '1.0', ('(DIAB = y, AL = 0.0, LAD = 75)', '(LM = 30)'): '1.0'}
但是正如其他人所说,输入和输出格式以这种方式很奇怪,也许您应该先弄清楚您的要求。
推荐阅读
- python - 为什么当值通过条件时我的while循环仍然运行
- sql-server - 是否可以运行一个while循环来创建动态选择列
- sql-server - IDENTITY 如何不等于 SQL Server 中的记录数?
- java - Jackson/Gson 将 JavaFX 属性序列化和反序列化为 json
- windows - 如何启用虚拟化?
- vb.net - DataGridView 不透明度
- python - 控制互动。netcat 与 Python 的连接(子进程或类似的)
- docker - 如何在 MacOS 上的 docker swarm 中正确运行 nginx?
- php - 将复杂数组从 dql 查询转换为仅返回选定条目的简单数组
- react-native - 获取错误:包 react-native-gesture-handler 已被忽略,因为它包含无效的配置