我有一个看起来像这样的字典:
grades = {
'alex' : 11,
'bob' : 10,
'john' : 14,
'peter': 7
}
Run Code Online (Sandbox Code Playgroud)
和名单 students = ('alex', 'john')
我需要检查所有名称是否students存在于gradesdict中作为键.
grades可以有更多的名字,但所有的名字都students应该在grades
必须有一个简单的方法来做到这一点,但我仍然是python的新手,无法弄明白.试过if students in grades,没用.
在实际情况中,列表会更大.
Sve*_*ach 147
用途all():
if all(name in grades for name in students):
# whatever
Run Code Online (Sandbox Code Playgroud)
jam*_*lak 19
>>> grades = {
'alex' : 11,
'bob' : 10,
'john' : 14,
'peter': 7
}
>>> names = ('alex', 'john')
>>> set(names).issubset(grades)
True
>>> names = ('ben', 'tom')
>>> set(names).issubset(grades)
False
Run Code Online (Sandbox Code Playgroud)
调用它class是无效的,所以我将其更改为names.
<dict>.keys()您可以利用返回的来测试字典中是否有多个键set。
代码中的这个逻辑...
if 'foo' in d and 'bar' in d and 'baz' in d:
do_something()
Run Code Online (Sandbox Code Playgroud)
可以更简单地表示为:
if {'foo', 'bar', 'baz'} <= d.keys():
do_something()
Run Code Online (Sandbox Code Playgroud)
集合<=运算符测试左侧集合是否是右侧集合的子集。另一种写法是<set>.issubset(other).
集合还支持其他有趣的操作:https://docs.python.org/3.8/library/stdtypes.html#set
使用此技巧可以压缩代码中的许多位置来检查多个键,如上面第一个示例所示。
还可以使用以下命令检查整个键列表<=:
if set(students) <= grades.keys():
print("All studends listed have grades in your class.")
# or using unpacking - which is actually faster than using set()
if {*students} <= grades.keys():
...
Run Code Online (Sandbox Code Playgroud)
或者 ifstudents也是一个字典:
if students.keys() <= grades.keys():
...
Run Code Online (Sandbox Code Playgroud)
小智 5
假设学生为集合
if not (students - grades.keys()):
print("All keys exist")
Run Code Online (Sandbox Code Playgroud)
如果不将其转换为设置
if not (set(students) - grades.keys()):
print("All keys exist")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
49526 次 |
| 最近记录: |