我有两个数据源,一个是列表,另一个是字典的列表,我的数据看起来像下面。
need_placeholder = ['1200', '1300', '1400']
ad_dict = [{"Name": "A", "ID": "1999"}, {"Name": "B", "ID": "1299"},
{"Name": "C", "ID": "1400"}]
我需要检查是否 need_placeholders
项目等于 ID
值从 ad_dict
. 这是我的脚本。
for item in need_placeholder:
adpoint_key = item
for index, my_dict in enumerate(ad_dict):
if my_dict["ID"] == adpoint_key:
continue
else:
print(f'No key exists for {adpoint_key}')
输出是:
No key exists for 1200 No key exists for 1200 No key exists for 1200 No key exists for 1300 No key exists for 1300 No key exists for 1300
我想要的输出是:
No key exists for 1200 No key exists for 1300
我怎样才能在不循环浏览字典或列表的情况下比较这些值呢?
解决方案:
你可以试试这个。
>>> need_placeholder = ['1200', '1300', '1400']
>>> ad_dict = [{"Name": "A", "ID": "1999"}, {"Name": "B", "ID": "1299"},
{"Name": "C", "ID": "1400"}]
>>> keys={d['ID'] for d in ad_dict} # Set of all unique ID values
>>> [key for key in need_placeholder if not key in keys]
# ['1200', '1300']
你可以使用 itertools.filterfalse
list(filterfalse(lambda x:x in keys, need_placeholder))
# ['1200', '1300']
如果你不在乎秩序
set(need_placeholder)-keys
# {'1300', '1200'}
使用 all
>>> for key in need_placeholder:
... if all(key != d['ID'] for d in ad_dict):
... print(f'No key exists for {key}')
...
No key exists for 1200
No key exists for 1300
使用 for-else
>>> for key in need_placeholder:
... for d in ad_dict:
... if key==d['ID']:
... break
... else:
... print(f'No key {key}')
...
No key 1200
No key 1300