Python:如果值存在于dict中较长的键中,则从字典值列表中删除该值
我有这样一句话:Python:如果值存在于dict中较长的键中,则从字典值列表中删除该值,python,Python,我有这样一句话: {'key1':['val1','val2','val3'], 'key1_key2':['val1','val3','val4']} 我想删除冗余,对于每个值,如果该值也是具有较长单词的不同键的值,请从较短单词键中删除该值 因此,在本例中,输出为: {'key1':['val2'],'key1_key2':['val1','val3','val4']} 我正在寻找最具蟒蛇风格的方法。我知道我可以发展的一个方法是: #for each key and value in th
{'key1':['val1','val2','val3'], 'key1_key2':['val1','val3','val4']}
我想删除冗余,对于每个值,如果该值也是具有较长单词的不同键的值,请从较短单词键中删除该值
因此,在本例中,输出为:
{'key1':['val2'],'key1_key2':['val1','val3','val4']}
我正在寻找最具蟒蛇风格的方法。我知道我可以发展的一个方法是:
#for each key and value in the dict
for k,v in dict1.items():
#so i can compare to every other key and value in the dict
for k2,v2 in dict1.items():
#if k2 string is a subset of k string (i.e. if one k is 'key1' and one k is 'key1_key2'):
small_list = #remove any item that's also in the big list
dict1[k] = small_list
我想知道这是开发这个的最好方法(在我被拖下水试图让它工作之前),还是有人有更好的解决方案 您可以执行以下操作:
from collections import defaultdict
d = {'key1': ['val1', 'val2', 'val3'], 'key1_key2': ['val1', 'val3', 'val4']}
longest_key = defaultdict(str)
# create a dictionary that maps values to the longest key
for key, values in d.items():
for value in values:
longest_key[value] = max(longest_key[value], key, key=len)
# filter out the input dictionary using the lookup dictionary created in the above step
for key, values in d.items():
d[key] = [value for value in values if longest_key[value] == key]
print(d)
输出
{'key1': ['val2'], 'key1_key2': ['val1', 'val3', 'val4']}
这句话的结果应该是什么?@RomanPerekhrest我相信输出应该是
{'key1'['val1','val2','val3','val4'],'key3'.'key2'.'key1'.['val1'].['val1'].[/code>?@RomanPerekhrest我相信输出应该是{'key1'['val2'],'key1'.['val2'],'key2'.['val3','val4'],'key2'.['key1'.]。这个{'key1':['val1','val2','val3'],'key1_-key2':['val1','val3','val4','val2'],'key3_-key1_-key2':['val1']怎么样
?(钥匙换了)@RomanPerekhrest你说钥匙换了是什么意思?如果只将值保留在最长键中(最长按len)。@RaySteam,比较我的第一条和最后一条评论中的输入dict,看看区别。我不是“为了好玩”才发表我的评论——我们需要知道边缘案例