Python различное количество ключей хранения словаря в текстовом файле в указанном формате - PullRequest
0 голосов
/ 16 октября 2019

У меня есть словарь в следующем формате frequent_itemset= {'11': 23, '23': 20, ('20', '32'): 10, ('2', '3'): 9, ('1', '2, '3'): 5} и т. Д. Я хочу сохранить его в output.txt в следующем формате.

Ожидаемый результат

11 (23)
23 (20)
20 32 (10)
2 3 (9)
1 2 3 (5)

Я написал это:

    with open('output.txt', 'w') as file:
        for k, v in frequent_itemset.items():
        file.write("{} ({}) \n".format(" ".join(map(str, k)), v))

результат:

1 1 (23)
1 2 (20)
20 32 (10)
2 3 (9)
1 2 3 (5)

Ответы [ 3 ]

3 голосов
/ 16 октября 2019

Вы путаете карту, потому что строка считается итеративной, а также кортежем / списком.

Например, если вы перебираете список, содержащий ["a", "b", "c"], вы получаете "a", "b", "c". Однако, если вы перебираете строку "abc", вы также получаете "a", "b", "c".

Попробуйте вместо этого ...

frequent_itemset= {'11': 23, '23': 20, ('20', '32'): 10, ('2', '3'): 9, ('1', '2', '3'): 5}

for k,v in frequent_itemset.items():
    if isinstance(k, (list, tuple)):
        key = ' '.join([x for x in k])
    else:
        key = k
    print("{} ({})".format(key,v))
2 голосов
/ 16 октября 2019
frequent_itemset= {'11': 23, '23': 20, ('20', '32'): 10, ('2', '3'): 9, ('1', '2', '3'): 5} 

for k,v in frequent_itemset.items():
    print(*k, '({})'.format(v)) if isinstance(k, tuple) else print(k,'({})'.format(v)) 

выход

11 (23)
23 (20)
20 32 (10)
2 3 (9)
1 2 3 (5)
1 голос
/ 16 октября 2019

Простой for цикл:

for x,y in frequent_itemset.items(): print((x if type(x)==str else " ".join(x)) + " (" + str(y) + ")" )

Один вкладыш:

[print((x if type(x)==str else " ".join(x)) + " (" + str(y) + ")" ) for x,y in frequent_itemset.items()]

Результат

11 (23) 23 (20) 20 32 (10) 2 3 (9) 1 2 3 (5)

...