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']}
我不确定如何开始这样做,所以我需要帮助
答案 0 :(得分: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']}
答案 1 :(得分:2)
使用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']}