【问题标题】:How can I get corresponding list values in one dictionary from another python dictionary where they are listed as keys, compare and print out a csv?如何从另一个python字典中获取一个字典中的相应列表值,它们被列为键,比较并打印出一个csv?
【发布时间】:2019-05-03 21:50:40
【问题描述】:

我从大量数据中创建了一个默认字典,其中包含如下预览的列表值。 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)}

值列表中的第二个选项(总和)是我希望用来比较不同键的数字。这是一个总金额。我希望在 CSV 文件中首先显示总和最小的 key_ID,然后显示总和更大的 ID,依此类推,如下所示。一句话:

(key_ID(least sum); key_ID ; sum for (least sum) key_ID ; sum for other key _Id ; shared text)

> 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']

到目前为止,我一直在尝试使用字典来构建值并使用 pandas 打印为 csv,但没有取得太大成功。任何想法都会有帮助。此代码为每个文本提供其自己的共享该文本的 key_ID 的单独 csv 文件。

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

【问题讨论】:

    标签: python pandas csv dictionary dataframe


    【解决方案1】:

    以下代码执行以下操作:

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

    【讨论】:

    • 代码中是否可以包含所有一个或多个相似的文本?这样只要提到共享文本值就会有重复的值。
    • 你能用一个例子解释一下这个问题吗?
    • 例如如果:64124: (['conference', 'webnet'], 12573918273000, 3361514425 由于总和较小但它与 52384 共享一个文本值,我们得到的输出为:64124 ; 52384 ; 12573918273000; 1444856137000 ; ['webnet']
    • 也许你可以在主问题的例子中加入这一项,这样就很清楚你要找什么样的输出了。
    • 我决定在这里发布问题。 stackoverflow.com/q/53857382/5550563
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-08
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 2013-11-06
    • 2019-10-07
    • 1970-01-01
    相关资源
    最近更新 更多