我对Python很新,所以我欢迎其他方法。
我有一个我开头的词典列表(从文件中读取)。 现在我有一堆额外的词典,我想添加到此列表中,但前提是它们不在原始列表中。
但是,我要求“不在原始列表中”由自定义比较函数定义,而不是Python默认使用的任何内容。
更具体地说,我想比较字典中的某些键/值对,如果它们相同,则为表达式返回“true”。
myList = ReadFromFile...
newList = ReadFromFile...
for item in newList:
if item not in myList: #I want custom behavior for this "in"
myList.append(item)
答案 0 :(得分:9)
答案 1 :(得分:2)
你没有。 in
运算符是语言语法的一部分。你想做的是这样的:
def comparison(item, otherContainer):
# Code here for custom comparison.
return True or False
for item in NewList:
if not comparison(item, myList):
myList.append(item)
答案 2 :(得分:1)
要解决您对g.d.d.c的回答的评论:
如果您的值是可清除的(粗略地说,这意味着它们是不可变的),最有效的可能是使用Python的集合。阅读myList
后,从myList
生成一组感兴趣的值。 (如果我正确地阅读了您的问题,您将拥有一组从myList
生成的元组。)然后,当您循环newList
时,您可以测试成员资格(再次,感兴趣的值) )针对该集合,每次测试为O(1),产生的算法复杂度为O(m + n)。
您可能希望使用operator.itemgetter
来获取感兴趣的值。
答案 3 :(得分:1)
如果你需要一个(object, object) --> bool
类型的功能来测试遏制,那么已经有one in the standard lib:
from operator import contains
myList = ReadFromFile...
newList = ReadFromFile...
for item in newList:
if not contains(myList, item):
myList.append(item)