gpt4 book ai didi

python - 遍历字典列表并与其他字典进行比较

转载 作者:行者123 更新时间:2023-12-05 09:35:36 26 4
gpt4 key购买 nike

我有以下词典

dic1 = { 'T1': "HI , china" , 'T2': "HI , finland" ,'T3': "HI , germany"}

dic2 = { 'T1': ['INC1','INC2','INC3'] , 'T2': ['INC2','INC4','INC5'],'T3': ['INC2','INC5']}

dic3 = { 'INC1': {'location':'china'} , 'INC2': {'location':'germany'},'INC3': {'location':'germany'},'INC4': {'location':'finland'}}

我需要根据 dic1,dic3 删除 dic2 中的值

例子:

  1. 我必须先遍历 dic2 并检查 T1 及其 INC 值。
  2. 如果 Dic1 中相应的 T1 键值与 dic3 中相应的 INC 值匹配,则保留 dic2 中的值,否则弹出该值。

图中给出了详细的解释。我期待以下输出。

dic2 = { 'T1': ['INC1'] , 'T2': ['INC4'],'T3': ['INC2']}

enter image description here

示例代码:

for k, v in dic2.items():
for k1, v1 in dic1.items():
if k is k1:
print k
for k2 in v:
for k3 in dic3.items():

我是 python 新手。我已经尝试了上面的代码片段,但我被击倒了。你能帮帮我吗?

最佳答案

可以在一行中完成:

>>> {k: [i for i in v if dic3.get(i, {}).get('location', '#') in dic1[k]] for k, v in dic2.items()}
{'T1': ['INC1'], 'T2': ['INC4'], 'T3': ['INC2']}

[i for i in v if dic3.get(i, {}).get('location', '#') 是仅从 中选取值的列表理解dic2 的列表,如果 dic3[i]['location']dic1[k] 内,其中 i 是字典 d3k 中的键是字典 d2 和字典 d1 中的键。

我使用了 dic3.get(i, {}).get('location', '#')(而不是 dic3[i]['location'],你得到 KeyError for key INC5 which is not in dic3) to avoid the issue of key i not在 dic3 中(将为我的下一个 .get 返回一个空的 dict)和在第二个 .get 中,我再次使用它返回 location 键的对应值(如果它存在)并检查返回的字符串是否位于字典 d1 的值内。

如果我知道 dic3 中不存在键 i,我将返回 #(可以是任何字符串/字符)(i not existing 基本上会给出 {}.get('location', '#') 反过来会给出 #,这是肯定的d1 中的成员资格失败,因此没问题。

精简 for 循环版本:

>>> ans = {}
>>> for k, v in dic2.items():
... temp = []
... for i in v:
... if i in dic3 and dic3[i]['location'] in dic1[k]:
... temp.append(i)
... ans[k] = temp
...
>>> ans
{'T1': ['INC1'], 'T2': ['INC4'], 'T3': ['INC2']}

关于python - 遍历字典列表并与其他字典进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65753082/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com