gpt4 book ai didi

python - 如果字典中不存在该值,则添加一个值

转载 作者:太空宇宙 更新时间:2023-11-04 03:11:45 25 4
gpt4 key购买 nike

我有一个默认字典。我遍历许多字符串并将它们作为数字添加到键下的目录中,但前提是字典中没有该值。所以我的代码看起来像这样:

from collections import defaultdict
strings = ["val1", "val2", "val2", "val3"]
my_dict = defaultdict(list)

key = 0
for string in strings:
if string not in my_dict.itervalues():
my_dict[key].append(string)
key += 1

print my_dict

但它似乎不起作用,因为所有字符串都被添加到字典中,如下所示:

defaultdict(<type 'list'>, {0: ['val1'], 1: ['val2'], 2: ['val2'], 3: ['val3']})

不应添加“val2”,它应该如下所示:

defaultdict(<type 'list'>, {0: ['val1'], 1: ['val2'], 2: ['val3']})

我做错了什么?

最佳答案

请注意,my_dict.itervalues() 返回您案例中的列表列表。所以 string not in lists 总是返回 True,从下面的代码可以看出,

>>> "val2" not in [["val1"], ["val2"]]
True

要获得所需的结果,请使用 itertools.chain.from_iterable 将列表的列表扁平化为列表。 ,

>>> import itertools
>>> "val2" not in itertools.chain.from_iterable([["val1"], ["val2"]])
False

您案例的完整源代码,

from collections import defaultdict
import itertools

strings = ["val1", "val2", "val2", "val3"]
my_dict = defaultdict(list)

key = 0
for string in strings:
if string not in itertools.chain.from_iterable(my_dict.values()): # flat a list of lists into a list
my_dict[key].append(string)
key += 1

print(my_dict)
# Output
defaultdict(<type 'list'>, {0: ['val1'], 1: ['val2'], 2: ['val3']})

关于python - 如果字典中不存在该值,则添加一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37793011/

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