Python 如何在维护某种订单的同时检查特定项目的列表?
我想检查一下列表中是否有两项。但是方法应该遵循一种顺序 在这里,我有一本关于人们的字典以及他们最喜欢的数字。但数字是关键,人是价值Python 如何在维护某种订单的同时检查特定项目的列表?,python,Python,我想检查一下列表中是否有两项。但是方法应该遵循一种顺序 在这里,我有一本关于人们的字典以及他们最喜欢的数字。但数字是关键,人是价值 fav_num_dict={13:A',33:B',23:C',25:D',11:E',4:F'} 人员检查=[“D”,“B”] 对于num,fav_num_dict.items()中的人员: 如果人员在人员检查中: 打印(fav_num_dict[num],num) 我在做某种工作,在人员到检查中的人员顺序很重要。但是当我运行脚本时,它会打印“B”,首先是他/她
fav_num_dict={13:A',33:B',23:C',25:D',11:E',4:F'}
人员检查=[“D”,“B”]
对于num,fav_num_dict.items()中的人员:
如果人员在人员检查中:
打印(fav_num_dict[num],num)
我在做某种工作,在人员到检查中的人员顺序很重要。但是当我运行脚本时,它会打印“B”,首先是他/她的号码,然后是“D”。现在,这是因为“B”在字典中排在第一位,而且它也存在于人物检查中,尽管它是第二项
我这里的问题是,如何使程序尊重我对人员的检查命令?比如,如果它首先找到“B”,但它是我指定列表中的第二项,它应该等到找到第一项“D”,然后是“B”
我也可以做一个人对人检查。reverse()
,但那总是不起作用。因为people\u to\u check
也可以包含与fav\u num\u dict
中的项目顺序一致的项目,所以您可以反转字典(如果名称是唯一的…),然后只需使用常规dict查找:
fav_num_dict={13:A',33:B',23:C',25:D',11:E',4:F'}
reverse_dict={v:k表示k,v表示fav_num_dict.items()}
人员检查=[“D”,“B”]
对于人员检查中的人员:
如果此人处于相反状态,则:
打印(个人,反向记录[个人])
输出:
D 25
B 33
您可以反转字典(如果名称是唯一的…),然后只需使用常规dict查找:
fav_num_dict={13:A',33:B',23:C',25:D',11:E',4:F'}
reverse_dict={v:k表示k,v表示fav_num_dict.items()}
人员检查=[“D”,“B”]
对于人员检查中的人员:
如果此人处于相反状态,则:
打印(个人,反向记录[个人])
输出:
D 25
B 33
通过迭代列表人员到检查
并查询反向字典(如果人员在字典中),您将获得所需的顺序。例如,您可以执行以下操作-
fav_num_dict = {13: 'A', 33: 'B', 23: 'C', 25: 'D', 11: 'E', 4: 'F'}
reversed_dict = dict((val,key) for key, val in fav_num_dict.items())
people_to_check = ["D", "B"]
for person in people_to_check:
if person in reversed_dict:
print(person, reversed_dict[person])
只有当每个数字都与一个人有唯一关联时,如果一个人喜欢两个以上的数字并且是要检查的人之一,你可能会得到他喜欢的其中一个数字,而不是全部。你可以通过迭代列表中的人到人检查
并查询反向字典(如果该人在场)来获得所需的顺序。例如,您可以执行以下操作-
fav_num_dict = {13: 'A', 33: 'B', 23: 'C', 25: 'D', 11: 'E', 4: 'F'}
reversed_dict = dict((val,key) for key, val in fav_num_dict.items())
people_to_check = ["D", "B"]
for person in people_to_check:
if person in reversed_dict:
print(person, reversed_dict[person])
只有当每个数字都与一个人有唯一关联时,如果一个人喜欢两个以上的数字并且是要检查的人之一,您可能会得到他喜欢的其中一个数字,而不是全部。还有另一种方法,您可以迭代人员到检查,然后使用dict.keys()和dict.values()找到与人员到检查中存在的值相关联的键
希望这有帮助还有另一种方法,您可以迭代人员到检查
,然后使用dict.keys()和dict.values()查找与人员到检查
中的值相关联的键
希望这是有帮助的或者,您也可以创建一个函数,通过使用传递dict的函数和一个必须找到其键的值,您将获得dict中任何值的键。通过此链接或者,您也可以创建一个函数,通过传递dict和一个必须找到其键的值,使用函数可以获得dict中任何值的键。浏览此链接您的词典结构容易出错。两个人可以有相同的喜爱号码。颠倒你的字典。如果你反复查看要检查的人的列表,而不是fav_num_dict,以保持正确的顺序,那会怎么样?只是一点,不能保证字典应该保持正确的顺序。如果希望搜索结果按该顺序排列,则应该在搜索词上循环,而不是在字典中的项目上循环。@MrFelixU Python 3.7保留dict插入顺序。CPython3.6也是如此,但这是一个实现细节。你看,但无论如何,这是离题的,因为正如你所说,OP应该在列表上循环,而不是在dict上循环。@wjandrea确实如此,但正如你所说,这不是一种语言功能,在当前的实现中恰好是这样,我认为在算法中依赖它是不明智的。你的字典结构很容易出错。两个人可以有相同的喜爱号码。颠倒你的字典。如果你反复查看要检查的人的列表,而不是fav_num_dict,以保持正确的顺序,那会怎么样?只是一点,不能保证字典应该保持正确的顺序。如果希望搜索结果按该顺序排列,则应该在搜索词上循环,而不是在字典中的项目上循环。@MrFelixU Python 3.7保留dict插入顺序。CPython3.6也是如此,但这是一个实现细节。你看,但不管怎么说,这是离题的原因,就像你说的OP应该在列表上循环,而不是dict。@wjandrea确实如此,但正如你所说的,这不是一种语言功能,在当前的实现中正好如此,我认为在算法中依赖它是不明智的。dict()
可以使用一个生成器,因此不需要该列表:dict((val,key)for key,val in fav_num_dict.items())
。像亚当的回答中那样做听写理解更简单:{v:k代表k,v代表fav_num_dict.items()}
@wjandrea:谢谢你的建议。修改了答案。dict()
可以使用生成器,因此不需要该列表:dict((val,key)表示key,val表示fav_num_dict.items())
。做一个像亚当的答案那样的听写理解更简单:{v:k代表k,v代表in