【问题标题】:Getting error while using itertools in Python在 Python 中使用 itertools 时出错
【发布时间】:2020-07-08 10:49:15
【问题描述】:

这是OP1OP2 的延续。

具体而言,目标是在多个dict 与键paper_title 具有相同内容时删除重复项。

但是,如果list 的估算方式不一致,例如dictstr 的组合,则该行会引发错误

TypeError:字符串索引必须是整数

产生上述错误的完整代码如下:-

from itertools import groupby



def extract_secondary():
    # 
    test_list = [{"paper_title": 'This is duplicate', 'Paper_year': 2}, \
                 {"paper_title": 'This is duplicate', 'Paper_year': 3}, \
                 {"paper_title": 'Unique One', 'Paper_year': 3}, \
                 {"paper_title": 'Unique two', 'Paper_year': 3}, 'all_result']
    f = lambda x: x["paper_title"]
    already_removed = [next(g) for k, g in groupby(sorted(test_list, key=f), key=f)]


extract_secondary()

我可以知道代码的哪一部分需要进一步调整吗?欣赏任何见解。

PS:如果此线程被认为与OP1 重复,请通知我。但是,由于问题的独特性,我相信这个线程值得自己存在。

【问题讨论】:

  • 您不应要求人们下载并打开 pickle 文件。打开 pickle 文件可能会导致执行任意 python 代码(例如删除整个硬盘驱动器)。您应该更新您的示例以仅包含 pickle 文件中的数据。
  • test_list 中有一个 str,而不是 dict ("all_result")。因此sorted 抱怨它不能将f 用于str
  • 感谢@Chris 的输入,我设法根据您的洞察力找到了罪魁祸首。

标签: python duplicates


【解决方案1】:

感谢@Chris 指出strtest_list 中而不是dict ("all_result") 中的存在

为了解决 sorted 引发的错误,它不能将 f 用于 str,需要从列表中删除 str。

截至OP,str 可以被删除

list(filter('all_result'.__ne__, test_list))

请注意,在这种情况下,str 仅具有 'all_result' 的值。

那么完整的代码

def extract_secondary():

        test_list = [{"paper_title": 'This is duplicate', 'Paper_year': 2}, \
                     {"paper_title": 'This is duplicate', 'Paper_year': 3}, \
                     {"paper_title": 'Unique One', 'Paper_year': 3}, \
                     {"paper_title": 'Unique two', 'Paper_year': 3},'all_result','all_result']
        test_list=list(filter('all_result'.__ne__, test_list))
        f = lambda x: x["paper_title"]
        already_removed = [next(g) for k, g in groupby(sorted(test_list, key=f), key=f)]

extract_secondary()

【讨论】:

    猜你喜欢
    • 2013-08-04
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多