Python: While Statement = Statement Печать связанных значений

1

В Python у меня в настоящее время есть словарь с составным ключом. В этом словаре есть несколько вхождений этих ключей. (Клавиши разделяются запятой):

(A,B), (A,C), (A,B), (A,D), (C,A), (A,B), (C,A), (C,B), (C,B)

У меня уже есть что-то, что составляет уникальные вхождения и подсчитывает дубликаты, которые дают мне распечатку, подобную этой:

(A,B) со счетом 4, (A,C) со счетом 2, (B,C) со счетом 6 и т.д.

Я хотел бы знать, как закодировать цикл, который дал бы мне следующее:

Распечатайте первое заполнение первой части ключа и его связанных значений и подсчетов.

Имя: A:

Type Count

B     4
C     2

Total  6

Имя: B:

Type Count
A    3
B    2
C    3
Total 8

Я знаю, что мне нужно создать цикл, в котором first statement = the first statement и сделать следующее, но не имеют реальной идеи, как подходить/кодировать это.

  • 1
    Как вы можете иметь словарь с одним и тем же ключом несколько раз ( (A,B) например)?
  • 0
    Это из списка списка, который в основном происходит из огромного текстового файла. Где я должен был искать определенные ценности и находить значения, связанные с ними. Для нескольких вхождений словаря я в основном увеличивал значение V на 1 для каждого найденного вхождения. Если он не найдет это значение, он создаст новое значение и установит его в 1. Извините, я был неясен. Я хочу сказать, что я в основном увеличил значение для каждого дубликата, найденного в исходном списке. Словарь - это все уникальные записи, но значение V для каждой записи представляет количество раз, найденных в исходном списке.
Показать ещё 3 комментария
Теги:
loops
dictionary
unique

2 ответа

2

Вот немного медленный алгоритм, который сделает это:

def convert(myDict):
    keys = myDict.keys()
    answer = collections.defaultdict(dict)
    for key in keys:
        for k in [k for k in keys if k.startswith(key[0])]:
            answer[key[0]][k[1]] = myDict[k]
    return answer

В конце концов, я думаю, что вы после этого является Trie

0

Немного неверно сказать, что ваш словарь имеет несколько значений для заданного ключа. Python этого не допускает. Вместо этого у вас есть ключи, которые являются кортежами. Вы хотите распаковать эти кортежи и перестроить вложенный словарь.

Вот как я это сделаю:

import collections

# rebuild data structure
nested = collections.defaultdict(dict)
for k, v in myDict.items():
    k1, k2 = k                # unpack key tuple
    nested[k1][k2] = v

# print out data in the desired format (with totals)
for k1, inner in nested.items():
    print("%s\tType\tCount" % k1)
    total = 0
    for k2, v in innner.items():
        print("\t%s\t%d" % (k2, v))
        total += v
    print("\tTotal\t%d" % total)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню