python - 如果字典值存在于集合中,则删除它们
问题描述
我有一套 Python
A = {34, 4, 7, 39, 40, 13, 18, 20}
和一本字典
B = {4: [6, 34, 39], 7: [18, 34], 13: [6, 18, 34], 18: [7, 13],
20: [31, 47], 34: [4, 7, 13], 39: [4, 8], 40: [15, 43]}
我想创建一个新字典 C,如果 B 中的任何值包含 A 中的数字,则必须将它们从相应的值列表中删除。键应该不受影响。
例如,我正在寻找的所需输出是:
C = {4: [6], 7: [], 13: [6], 18: [], 20: [31, 47], 34: [], 39: [8]}
我尝试使用以下代码解决此问题:
C = {}
for key, value in B_mod.items():
if value in A:
C[key] = value
print("C is:", C)
我得到的输出如下:
C is: {7: 18, 18: 7, 34: 4, 39: 4}
显然,它不起作用。
*请注意,这B_mod
意味着我使用以下代码取消列出字典 B 的值中的列表:
B_mod = {k:v[0] for k,v in B.items()} # Unlisitng the values of dictionary B
我这样做是因为我无法将列表作为 B.* 中的值进行迭代
任何帮助获得C?
解决方案
您绝对可以遍历 的值中的列表B
,确实,您需要,所以像这样:
>>> A = {34, 4, 7, 39, 40, 13, 18, 20}
>>> B = {4: [6, 34, 39], 7: [18, 34], 13: [6, 18, 34], 18: [7, 13], 20: [31, 47], 34: [4, 7, 13], 39: [4, 8], 40: [15, 43]}
>>> C = {}
>>> for key, value in B.items():
... new_value = []
... for val in value:
... if val not in A:
... new_value.append(val)
... C[key] = new_value
...
>>> C
{4: [6], 7: [], 13: [6], 18: [], 20: [31, 47], 34: [], 39: [8], 40: [15, 43]}
>>>
您还可以将字典推导与列表推导一起使用:
>>> {k:[v for v in vs if v not in A] for k, vs in B.items()}
{4: [6], 7: [], 13: [6], 18: [], 20: [31, 47], 34: [], 39: [8], 40: [15, 43]}
这相当于for循环方法。哪个对您更有意义就可以了。
推荐阅读
- sql - 在两个结果之间产生差异
- ms-access - ADODB.LAN 网络上的连接非常慢 > 需要更高的速度
- python - 获取第一行和当前行之间存在特定列值的行
- c# - 显示重复数据的 Firebase Analytics 内容图
- javascript - 时间到期时如何删除div?
- php - 如何在从数据库中获取数据时仅获取最后一次迭代值,我尝试将值获取为 JSON 格式
- angular - Angular:随机类和 id 名称
- reactjs - 反应日期选择器为一天或正文添加边距
- r - 比较同一数据框中的日期间隔
- authentication - Asp.Net Core 2 中基于令牌的身份验证