Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何删除列表中的重复项?_Python - Fatal编程技术网

Python 如何删除列表中的重复项?

Python 如何删除列表中的重复项?,python,Python,例如,如果我有一个列表: courses = [{name: a, course: math, count:1}] 如果我再次输入name:a course:math,列表将是 courses = {name: a, course: math, count:2} 我只希望具有相同名称和课程的项目不会附加到列表中,而只是增加“count”键项目 我试过: def add_class(inputname,inputcourse): for i in (len(courses)):

例如,如果我有一个列表:

courses = [{name: a, course: math, count:1}]
如果我再次输入name:a course:math,列表将是

  courses = {name: a, course: math, count:2}
我只希望具有相同名称和课程的项目不会附加到列表中,而只是增加“count”键项目

我试过:

def add_class(inputname,inputcourse):
for i in (len(courses)):
      if courses[i]['name']== inputname and courses[i]['course']==inputcourse:
          courses[i][count]+=1
      else :
          newdata = {"name":inputname, "course":inputcourse,count:1}
          #i put count because this item is the first time.
          courses.append(newdata)
      print courses
我希望输出是class=
{name:a,course:math,count:2}
但实际输出是class=
[{name:a,course:math,count:2},{name:a,course:math,count:1}]
如果我输入一个新的数据,比如name:a,course:physic,那么输出将是
[{name:a,course:physic,count:1},{name:a,course:math,count:2},{name:a,course:math,count:1}]

您可以使用for else子句。仅当未达到break时,才会调用else部分,下面是一个示例

courses = []
courses.append({'name': 'a', 'course': 'math', 'count': 1})
def add_course(d):
    for course in courses:
        if course['course'] == d['course'] and course['name'] == d['name']:
            course['count'] += 1
            break
    else:
        d['count'] = 1
        courses.append(d)


add_course({'name': 'a', 'course': 'math'})
add_course({'name': 'a', 'course': 'english'})
print(courses)

作为输出,您有
[{'name':'a','course':'math','count':2},{'name':'a','course':'english','count':1}]

您可以使用for else子句。仅当未达到break时,才会调用else部分,下面是一个示例

courses = []
courses.append({'name': 'a', 'course': 'math', 'count': 1})
def add_course(d):
    for course in courses:
        if course['course'] == d['course'] and course['name'] == d['name']:
            course['count'] += 1
            break
    else:
        d['count'] = 1
        courses.append(d)


add_course({'name': 'a', 'course': 'math'})
add_course({'name': 'a', 'course': 'english'})
print(courses)

作为输出,您有[{'name':'a','course':'math','count':2},{'name':'a','course':'english','count':1}]

我可以建议您一种不同的方法吗

在您的案例中,与其使用一系列可能很难管理的词典,不如编写自己的类来存储“name”和“course”

通过定义特殊方法
\uuuuu hash\uuuu
\uuuuu eq\uuuu
,您可以使对象可散列,因此它们可以按。 如果你这样写:

from collections import Counter

a = NC("a", "math")
b = NC("b", "physics")
c = NC("a", "math")

l = [a, b, c]

lc = Counter(l)
print lc
print
将为您提供
计数器({[a:math]:2[b:physics]:1})

使用这种方法,您可以将所有
NC
对象添加到列表中,并在最后使用计数器来获取重复

在评论中请求后编辑。

要在“实时”中执行相同的操作,您可以创建一个空计数器,然后对其进行更新

from collections import Counter

lc = Counter()

lc.update([NC("a", "math")])
print lc #this prints: Counter({[a: math]: 1})

lc.update([NC("b", "physics")])
print lc #this prints: Counter({[a: math]: 1, [b: physics]: 1})

lc.update([NC("a", "math")])
print lc #this prints: Counter({[a: math]: 2, [b: physics]: 1})

只需记住,
Counter.update
需要一个iterable,因此如果要向计数器添加一个元素,则必须在输入中提供一个包含该元素的列表。当然,您也可以将更多元素添加到计数器中,例如:
lc。更新([NC(“b”、“物理”)、NC(“c”、“化学”)])
是有效的,并且两个对象都添加到计数器中。

我可以建议您一种不同的方法吗

在您的案例中,与其使用一系列可能很难管理的词典,不如编写自己的类来存储“name”和“course”

通过定义特殊方法
\uuuuu hash\uuuu
\uuuuu eq\uuuu
,您可以使对象可散列,因此它们可以按。 如果你这样写:

from collections import Counter

a = NC("a", "math")
b = NC("b", "physics")
c = NC("a", "math")

l = [a, b, c]

lc = Counter(l)
print lc
print
将为您提供
计数器({[a:math]:2[b:physics]:1})

使用这种方法,您可以将所有
NC
对象添加到列表中,并在最后使用计数器来获取重复

在评论中请求后编辑。

要在“实时”中执行相同的操作,您可以创建一个空计数器,然后对其进行更新

from collections import Counter

lc = Counter()

lc.update([NC("a", "math")])
print lc #this prints: Counter({[a: math]: 1})

lc.update([NC("b", "physics")])
print lc #this prints: Counter({[a: math]: 1, [b: physics]: 1})

lc.update([NC("a", "math")])
print lc #this prints: Counter({[a: math]: 2, [b: physics]: 1})


只需记住,
Counter.update
需要一个iterable,因此如果要向计数器添加一个元素,则必须在输入中提供一个包含该元素的列表。当然,您也可以将更多元素添加到计数器中,例如:
lc.update([NC(“b”,“physics”),NC(“c”,“chemistry”)])
是有效的,并且两个对象都添加到计数器中。

Python版本?我知道情况并非如此,只是出于好奇是不是有一个列表?我认为是因为
append
关键字。这不是有效的JSON…@kvk30它是2.7BTW,
class
是一个Python关键字——实际上,我很惊讶解析器允许您对它进行阴影处理(使用它作为变量名)<正如BlueSheepToken在他们的回答中所建议的那样,代码>课程,当然更可取。Python版本?我知道情况并非如此,只是出于好奇是不是有一个列表?我认为是因为
append
关键字。这不是有效的JSON…@kvk30它是2.7BTW,
class
是一个Python关键字——实际上,我很惊讶解析器允许您对它进行阴影处理(使用它作为变量名)<代码>课程,正如BlueSheepToken在他们的回答中所建议的那样,当然更可取。您的输出错误,您将得到count作为第一个键。我不确定为什么我的输出错误,count不是词汇表的键?在本地,我将其视为第三个键,但是,我正在对dict进行一些搜索,我很确定键的顺序是不确定的(这可能解释了你的计算和我的计算之间的差异)@kvk30 python字典是无序的,所以键的位置不应该是一个问题,而且你倾向于通过键访问dicts,所以键的位置也不应该是一个问题issue@BlueSheepToken我已经试过你的代码了。非常感谢你。它的工作原理:)新年快乐Btwy你的输出是错误的,在那里你会得到count作为第一个键。我不知道为什么我的输出是错误的,count不是字典的一个键?在本地,我认为它是第三个键,但是,我正在做一些关于dict的搜索,我很确定键的顺序是不确定的(这也许可以解释你的计算和我的计算之间的差异)@kvk30 python字典是无序的,所以键的位置不应该是一个问题,加上你倾向于按键访问dicts,所以键的位置也不应该是一个问题issue@BlueSheepToken我已经尝试了你的代码。非常感谢。它有效:)除夕快乐但是如果我想实时使用它,有可能吗?例如,如果我输入姓名和课程,计数器会在输入项目后给出结果吗?很抱歉,我还没有在Python上学习OOP。谢谢你,使用计数器的方法来编辑计数器本身,通过一些编辑可以完成很多工作。我将编辑我的答案以显示此内容。@Tiffany在这里。你在找这样的东西吗?但如果我想实时使用它,有可能吗?例如,如果