如果字典中不存在此值,请添加此值



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

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']})

最新更新