根据字典中的键值检查列表中的值,Python

我有两个数据源,一个是列表,另一个是字典的列表,我的数据看起来像下面。

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

给TA打赏
共{{data.count}}人
人已打赏
解决方案

查询在sql服务器中只改变最后一条记录的值。

2022-4-20 8:00:11

解决方案

谁能解释一下他们这里的图片是怎么分割的?

2022-4-20 9:00:09

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索