python列表,使用多个元素

python列表,使用多个元素,python,list,Python,List,是一个动态填充的列表,其中没有特定的顺序接收值。那么,如果收到的下一个值是(ID2,13),我如何根据ID2是收到的下一个值这一事实删除(ID2,10)?因为我不知道列表的填充顺序,所以我不知道索引 还有,我怎么知道一个特定ID的计数? 我尝试了a.count(ID1),但由于第二个元素,它找不到任何值 a=[(ID1,10)、(ID2,10)、(ID1,12)、(ID2,15)] 我目前的用法: while True: 'Receive ID information in format

是一个动态填充的列表,其中没有特定的顺序接收值。那么,如果收到的下一个值是(ID2,13),我如何根据ID2是收到的下一个值这一事实删除(ID2,10)?因为我不知道列表的填充顺序,所以我不知道索引

还有,我怎么知道一个特定ID的计数? 我尝试了
a.count(ID1)
,但由于第二个元素,它找不到任何值

a=[(ID1,10)、(ID2,10)、(ID1,12)、(ID2,15)]
我目前的用法:

while True:
    'Receive ID information in format (IDx,Value)'
     ID_info = (ID2,13) #For example
     if a.count(ID2) == 2: #I need to modify this line as it always returns 0
        del a[0] #This is what I need to modify to delete the correct information, as it is not always index 0
    a.append(ID_info)
else:

  a.append(ID_info)        

假设ID是可散列的,听起来像是要使用字典

a = {ID1: 10, ID2: 10}
id, val = (ID2, 13)
a[id] = val
有了“keep two”的添加,我仍然认为使用字典会更容易,尽管有一些修改

编辑:使用
集合的更简单版本。defaultdict

from collections import defaultdict

a = defaultdict(list)
a[ID1].append(10)
a[ID2].append(10)

id, val = (ID2, 13)
a[id].append(val)
if len(a[id]) > 2:
    a[id].pop(0)

def count(a, id):
    return len(a[id])


您还可以(也可能应该)将此行为封装到一个从
dict

继承的简单类中。听起来您正试图做字典所做的事情。有什么原因不能使用它吗?所以您希望跟踪
IDx->int
映射,并且应该只有一个
ID
,并且希望定期使用最新值更新它?听起来像是一个
字典的工作
。我需要有多个键是相同的,哪个字典不允许。当你得到一个重复的条目时,你如何知道是否删除具有相同ID的前一个条目?它是否附带这些信息?如果您需要像您所说的那样删除副本,那么如果已经有多个副本,您如何决定删除哪个副本?很抱歉,问题不清楚-如果列表中已经有两个具有相同ID的条目,我只想删除第一个条目,第三个条目是ReceivedHanks!这对我很有帮助。我犯了几个错误,编辑应该会把它们清理干净。如果id不在a.keys():a[id]=[]中,我更喜欢使用de-setdefault()方法:@user45949很好,尽管我认为
collections.defaultdict
可能是在这种情况下最好使用的类。这甚至消除了对
count
中逻辑的需要。
from collections import defaultdict

a = defaultdict(list)
a[ID1].append(10)
a[ID2].append(10)

id, val = (ID2, 13)
a[id].append(val)
if len(a[id]) > 2:
    a[id].pop(0)

def count(a, id):
    return len(a[id])