删除字典中的元素

2024-04-19 19:14:03 发布

您现在位置:Python中文网/ 问答频道 /正文

dict = {'name': ['bob', 'bob, 'james', 'jeff'], 'last': ['bob', 'jeff', 'smith', 'jones']}

如果列表中的元素等于指定的值,则保留该元素,否则 如果它不等于指定的值,则删除每个键中该索引处的元素。不使用进口

例如:

>>> dict = {'name': ['bob', 'bob', 'james', 'jeff'], 'last': ['bob', 'jeff', 'smith', 'jones']}
>>> process_dict(dict, 'name', 'bob')
dict = {'name': ['bob', 'bob'], 'last': ['bob', 'jeff']}

>>> dict = {'name': ['bob', 'bob', 'james', 'jeff'], 'last': ['bob', 'jeff', 'smith', 'jones']}
>>> process_dict(dict, 'name', 'jeff')
dict = {'name': ['jeff'], 'last': ['jones']}

process_dict(dict, key, value):
    pass


>>> dict = {'name': ['bob', 'bob', 'james', 'jeff'], 'last': ['bob', 'jeff', 'smith', 'jones']}
>>> process_dict(dict, 'name', 'bob')

指定的键是'name',指定的值是'bob',因此我们查看键'name'遍历这些值 并查看元素是否等于指定的值,如果等于,则继续下一个键,如果不等于 删除每个键中该索引处的值

所以

“name”中的第一个元素是“bob”,它等于指定的值,因此我们跳过它,下一个元素也是“bob” 所以我们跳过它,后面的下一个元素不等于指定的值,所以我们删除索引中每个键中的每个元素

我们现在得到:

{'name': ['bob', 'bob', 'jeff'], 'last': ['bob', 'jeff', 'jones']}

之后的下一个元素是'jeff',它也不等于指定的值,所以我们删除索引中每个键中的每个元素,我们 现在终于得到:

{'name': ['bob', 'bob'], 'last': ['bob', 'jeff']}

我不知道如何开始这个,所以我需要帮助


Tags: keyname元素列表valuepassprocessdict
2条回答

构建一组匹配索引(使用enumerate()生成),然后在生成新词典时选择这些索引:

def process_dict(dct, key, value):
    indices = [i for i, v in enumerate(dct[key]) if v == value]
    return {key: [value[i] for i in indices] for key, value in dct.items()}

演示:

>>> def process_dict(dct, key, value):
...     indices = [i for i, v in enumerate(dct[key]) if v == value]
...     return {key: [value[i] for i in indices] for key, value in dct.items()}
... 
>>> example1 = {'name': ['bob', 'bob', 'james', 'jeff'], 'last': ['bob', 'jeff', 'smith', 'jones']}
>>> process_dict(example1, 'name', 'bob')
{'last': ['bob', 'jeff'], 'name': ['bob', 'bob']}
>>> example2 = {'name': ['bob', 'bob', 'james', 'jeff'], 'last': ['bob', 'jeff', 'smith', 'jones']}
>>> process_dict(example2, 'name', 'jeff')
{'last': ['jones'], 'name': ['jeff']}

使用enumerate获取找到匹配项的索引列表,然后在dict.items()上迭代并筛选出不在这些索引中的所有项。你知道吗

def process_dict(d, k, v):
     indexes = [i for i, x in enumerate(d[k]) if x==v] #indexes where a match is found
     return {k:[v[i] for i in indexes] for k, v in d.items()}
... 
>>> d = {'name': ['bob', 'bob', 'james', 'jeff'], 'last': ['bob', 'jeff', 'smith', 'jones']}
>>> process_dict(d, 'name', 'bob')
{'last': ['bob', 'jeff'], 'name': ['bob', 'bob']}

相关问题 更多 >