如何从另一个python字典中获取一个字典中的对应列表值,并将它们作为键列出、比较和打印出csv?

如何从另一个python字典中获取一个字典中的对应列表值,并将它们作为键列出、比较和打印出csv?,python,pandas,csv,dictionary,dataframe,Python,Pandas,Csv,Dictionary,Dataframe,我从大量数据中创建了一个默认字典,其值作为列表,如下所示。默认字典值在默认字典中表示为列表 default_dict = {('text2015', 'webnet'): [52384, 22276, 97376, 93696, 12672], ('datascience', 'bigdata', 'links'): [18720], ('biological', 'biomedics', 'datamining', 'datamodel', 'semantics'): [82465, 4342

我从大量数据中创建了一个默认字典,其值作为列表,如下所示。默认字典值在默认字典中表示为列表

default_dict = {('text2015', 'webnet'): [52384, 22276, 97376, 93696, 12672], ('datascience', 'bigdata', 'links'): [18720], ('biological', 'biomedics', 'datamining', 'datamodel', 'semantics'): [82465, 43424], ('links', 'scientometrics'): [23297, 73120]}
我有另一个数据字典,它将默认字典中的各个列表值作为键。数据字典中的顺序为(键ID:[文本值]、总计、guser\u 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)}
值列表中的第二个选项(sum)是我希望用来比较不同键的数字。这是一个总数。我希望在CSV文件中首先显示总和最小的密钥ID,然后显示总和较大的ID,以此类推,如下所示。简言之:

(密钥ID(最小和);密钥ID;密钥ID(最小和)的和;其他密钥ID的和;共享文本)

到目前为止,我试图使用字典来构建值,并使用pandas打印为csv,但没有太大成功。任何想法都会很有帮助。此代码为每个文本提供共享该文本的密钥ID的单独csv文件

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

以下代码执行以下操作:

  • 创建一个新字典,保存在两个字典中出现的记录,每个列表从最低到最高的“和”排序(我已经在一个表达式中写入了,为了可读性,可以考虑将其分解为步骤)
  • 浏览新字典,查看最低总和项是否必须有自己的行(当它是唯一项时)
  • 浏览必须有自己行的项目,并按照上面的格式输出内容
  • 或者,您可以将其导入到数据框中,让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)))
    

    代码中是否可能包含所有一个或多个类似文本?这样,只要提到共享文本值,就会有重复的值。你能用一个例子来解释这个问题吗?例如:
    64124:(['conference','webnet'],12573918273000,3361514425
    由于总和较小,但它与52384共享一个文本值,因此我们得到的输出为:
    64124;52384;12573918273000;1444856137000;['webnet']
    也许您可以将此项添加到主问题中的示例中,这样就可以清楚地知道您想要什么样的输出。我决定将问题发布到这里。
    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)))