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