Как я могу получить соответствующие значения списка в одном словаре из другого словаря Python, где они перечислены в качестве ключей, сравнить и распечатать CSV? - PullRequest
0 голосов
/ 02 декабря 2018

Я создал словарь по умолчанию из большого объема данных, который имеет значения в виде списка, как показано ниже.Значения default_dictionary представлены в виде списков в словаре по умолчанию.

default_dict = {('text2015', 'webnet'): [52384, 22276, 97376, 93696, 12672], ('datascience', 'bigdata', 'links'): [18720], ('biological', 'biomedics', 'datamining', 'datamodel', 'semantics'): [82465, 43424], ('links', 'scientometrics'): [23297, 73120]}

У меня есть еще один data_dictionary, в котором в качестве ключей используются отдельные значения списка из default_dictionary.Порядок в data_dictionary (key_ID: [text_values], total, guser_ID).Словарь данных имеет вид:

data_dictionary = {52384: (['text2015', 'webnet'], 1444856137000, 335829830), 18720: (['datascience', 'bigdata', 'links'], 1444859841000, 17987803), 82465: (['biological', 'biomedics', 'datamining', 'datamodel', 'semantics'], 1444856, 335829830), 73120: (['links', 'scientometrics'], 144481000, 17987803), 22276: (['text2015', 'webnet'], 1674856137000, 615387550), 97376: (['text2015', 'webnet'], 1812856137000, 371559830), 43424: (['biological', 'biomedics', 'datamining', 'datamodel', 'semantics'], 5183856, 363549260), 23297: (['links', 'scientometrics'], 1614481000, 26253825)}

Второй параметр (сумма) в списке значений - это число, которое я хочу использовать для сравнения различных ключей.Это сумма суммы.Я хотел бы, чтобы key_ID с наименьшей суммой был показан первым в CSV-файле, а идентификаторы с большей суммой показаны далее и так далее, как показано ниже.Другими словами:

(key_ID ( наименьшая сумма ); key_ID; сумма для ( наименьшая сумма ) key_ID; сумма для другого ключа _Id; общий текст)

> 52384 ; 22276 ; 1444856137000 ; 1674856137000 ; ['text2015', 'webnet']
> 52384 ; 97376 ; 1444856137000 ; 1812856137000 ; ['text2015', 'webnet']
> 18720 ; 18720 ; 1444859841000 ; 1444859841000 ; ['datascience','bigdata', 'links']
> 82465 ; 43424 ; 1444856 ; 5183856 ;['biological', 'biomedics', 'datamining', 'datamodel', 'semantics']  
> 73120 ; 23297 ; 144481000 ; 1614481000 ; ['links', 'scientometrics']

До сих пор я пытался использовать словарь для построения значений и печати в формате csv с использованием панд, но не добился большого успеха.Любые идеи действительно помогут.Этот код предоставляет каждому тексту свой собственный CSV-файл с идентификаторами ключей, которые разделяют этот текст.

for key, value in default_dict.items():
    df = pd.DataFrame(value)
    df.to_csv('graph' + '_'.join(key) + '.csv', index=False)

1 Ответ

0 голосов
/ 02 декабря 2018

Приведенный ниже код выполняет следующие действия:

  1. Создайте новый словарь, содержащий записи, которые встречаются в обоих ваших словарях, с каждым списком, отсортированным от самой низкой до самой высокой «суммы» (я написалэто в одном выражении; для удобства чтения вы можете разбить его на этапы)
  2. Просмотрите новый словарь и посмотрите, должна ли элемент с наименьшей суммой иметь свою собственную строку (когда это единственный элемент) или нет
  3. Просмотрите элементы, которые должны иметь свою собственную строку, и выведите содержимое, как вы отформатировали их выше.

В качестве альтернативы вы можете импортировать его в DataFrame, чтобы позволить Pandas обрабатывать сохранение какCSV.Надеюсь, это поможет.

output_dict = {textval: sorted(
                          [[key_ID, data_dictionary[key_ID][1]]
                          for key_ID in default_dict[textval]
                          if key_ID in data_dictionary],
                        key=lambda x: x[1])
               for textval in default_dict}

for textval, entries in output_dict.items():
    list_for_output = entries if len(entries) == 1 else entries[1:]
    for item in list_for_output:
        print('%d ; %d ; %d ; %d ; %s' % (entries[0][0], item[0],
        entries[0][1], item[1], list(textval)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...