python-3.x 如果一个字典中所有的键都有一个集合的值,那么我如何跳过列表中的一个元素呢?

8xiog9wr  于 2022-11-26  发布在  Python
关注(0)|答案(1)|浏览(129)

如标题所示,如果我有一个包含键和值的字典(其中这些值是集合),其中所有键的值都已经有一个来自列表的元素,它们会继续前进,看看是否可以将下一个元素添加到集合中。
例如,lst =['a','b','v']

lst = ['a', 'b', 'v']
sample_dct = {'test': {'a'}, 'letter': {'a'}, 'other': {'a'}}
other_dct =  {'test': {'a'}, 'letter': {'a'}, 'other': {'g'}}
test_dct =   {'test': {'a', 'b'}, 'letter': {'a', 'b'}, 'other': {'a'}}

这些字典将成为:

sample_dct = {'test': {'a', 'b'}, 'letter': {'a', 'b'}, 'other': {'a', 'b'}}
other_dct =  {'test': {'a'}, 'letter': {'a'}, 'other': {'g', 'a'}}
test_dct =   {'test': {'a', 'b'}, 'letter': {'a', 'b'}, 'other': {'a', 'b'}}

我尝试了以下方法:

lst = ['a', 'b', 'v']

other_dct =  {'test': {'a'}, 'letter': {'a'}, 'other': {'g'}}

j = 0
for i in other_dct:
    while not j == len(lst) - 1:
        if not lst[j] in other_dct[i]:
            x = other_dct[i]
            x.add(lst[j])
            other_dct[i] = x
            break
        else:
            j += 1
    j = 0


print(other_dct)

它将打印{'test':'b','a'},'字母':'b'、'a'}、'其他':{'a',' g '}}
我知道如何只添加一个元素一次到集合,但我仍然困惑如何只添加'b',如果第三个关键字已经有'a'
我正在考虑把这个列表变成一个字典,类似于它被添加到的字典,方法是把键变成值,它们被添加到一个集合,如下所示:新的dct ={'a':{'测试','字母','其他},' b '::{'测试','字母'},'v':设置()}
但我不确定这会不会让事情复杂化。

dgsult0t

dgsult0t1#

你可以使用python的all函数来测试所有的值是否都包含列表项,如果没有,那么这个项就可以添加到所有的值中(因为它是一个集合,重复并不重要),然后返回,否则就移到列表中的下一个字母。

lst = ['a', 'b', 'v']
sample_dct = {'test': {'a'}, 'letter': {'a'}, 'other': {'a'}}
other_dct = {'test': {'a'}, 'letter': {'a'}, 'other': {'g'}}
test_dct = {'test': {'a', 'b'}, 'letter': {'a', 'b'}, 'other': {'a'}}

def add_items(items, dicts_set):
    for item in items:
        if not all((item in val for val in dicts_set.values())):
            for k in dicts_set:
                dicts_set[k].add(item)
            return dicts_set
    return dicts_set
            
print(add_items(lst, sample_dct))
print(add_items(lst, other_dct))
print(add_items(lst, test_dct))
# output:
#{'test': {'a', 'b'}, 'letter': {'a', 'b'}, 'other': {'a', 'b'}}
#{'test': {'a'}, 'letter': {'a'}, 'other': {'g', 'a'}}
#{'test': {'a', 'b'}, 'letter': {'a', 'b'}, 'other': {'a', 'b'}}

相关问题