gpt4 book ai didi

python - 根据匹配键的值比较 2 个字典

转载 作者:行者123 更新时间:2023-12-05 00:53:07 25 4
gpt4 key购买 nike

我有两本词典:

S = {0: [1, 2, 3, 4], 
1: [5, 6, 7, 8, 9, 10],
2: [11, 12, 13, 14, 15]}

R = {0: [1, 2, 8],
1: [8, 5, 10, 11, 15],
2: []}

如果列表中的任何数字匹配,我需要找出给定的键。如果他们这样做,则将数字替换为“X”。

结果应该是这样的

    F = {0: ['X', 'X', 3, 4], 
1: ['X', 6, 7, 8, 9, 'X'],
2: [11, 12, 13, 14, 15]}
or

F = [['X', 'X', 3, 4], ['X', 6, 7, 8, 9, 'X'], [11, 12, 13, 14, 15]]

如果 F 是第三本词典或列表列表,我无所谓。

我的代码如下:

Solution = []

for x in S.values():
for y in R.values():
for j in y:
for n, i in enumerate(x):
if j == i:
x[n] = 'X'

Solution.append(x)

问题是我将 R 中的每个值与 S 中的每个字典值进行比较。我不明白如何将 [1, 2, 3, 4] 与 [1, 2, 8] 独立于 [5, 6, 7, 8, 9, 10] 与 [8, 5, 10] 进行比较, 11, 15]。

最佳答案

您可以使用 sets :

# This modifies S in place; use a new dict if you want to keep S
for k,li1 in S.items():
li2=R.get(k,[])
diff=set(li1)-set(li2)
S[k]=[e if e in diff else 'X' for e in li1]


>>> S
{0: ['X', 'X', 3, 4], 1: ['X', 6, 7, 'X', 9, 'X'], 2: [11, 12, 13, 14, 15]}

difference的set操作- 你可以得到第一个列表中的内容,但不能同时得到:

>>> set([1,2,3,4]) - set([2,3,8])
{1, 4}

一旦知道这一点,就很容易根据需要更改列表。

如果你想要一个列表列表,那么你可以使用推导式:

LoL=[[e if e in set1 else 'X' for e in li1]
for li1,set1 in
zip(S.values(), {k:set(li1)-set(R.get(k,[]))
for k,li1 in S.items()}.values())]

>>> LoL
[['X', 'X', 3, 4], ['X', 6, 7, 'X', 9, 'X'], [11, 12, 13, 14, 15]]

但恕我直言,循环更容易理解......

关于python - 根据匹配键的值比较 2 个字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68429965/

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