Как я могу преобразовать замороженные наборы ключей и значений в словаре в обычные? - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть словарь ключей и значений 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'}

1 Ответ

0 голосов
/ 04 мая 2019

Если вы просто хотите преобразовать замороженный набор в кортеж, вы можете попробовать это:

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()}

output

{(('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'}

Но, как говорили другие, формат ввода и вывода таким образом,может быть, вам следует сначала прояснить ваше требование.

...